2014-10-24 11 views
5

Jak zmienić kontroler widoku za pomocą UIButton? Oto mój kod:Swift - Zmień kontroler widoku za pomocą przycisku akcji

@IBAction func scanAction(sender: AnyObject) { 
     //switch view controller 
} 

Po kliknięciu przycisku Skanuj przejdzie do formularza logowania.

Moje kontroler widok w Main.storyboard jest jak ten

enter image description here

proszę mi dać kilka rad, jeśli możesz. Dziękuję Ci.

Odpowiedz

12

ja już znalazłem odpowiedź

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 

let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("nextView") as NextViewController 
self.presentViewController(nextViewController, animated:true, completion:nil) 
7

Jednym ze sposobów jest po prostu przeniesienie modalne z przycisku. Nie wymaga żadnego IBOutlet.

enter image description here

Programowo:

@IBAction func scanButton (sender: UIButton!) { 

    performSegueWithIdentifier("nextView", sender: self) 

} 

Należy dodać modalne segue i nazwa identyfikatora. Podłączasz VC1 do VC2.

+0

Chcę zrobić programowo –

+0

Dodałem instrukcje programistyczne dla VC. Przykład z Mini nie zadziała, dopóki nie użyjesz kontrolera nawigacyjnego. –

+0

Spróbuję najpierw –

1

Najprostszym sposobem jest stworzenie UINavigationViewController. Następnie dodaj przycisk do bieżącego ekranu. Teraz naciśnij i przeciągnij przycisk do kontrolera widoku docelowego. To jest to.

Źródło: iOs UINavigationViewController.

1

Istnieje rzeczywiście odpowiedź bez kodu zakodowanego na stałe. W swoim scenorysie możesz kontrolować przeciąganie przycisku do następnego kontrolera widoku i definiowanie tam przejścia. Zapewni to, że za każdym razem, gdy naciśniesz przycisk, rozpocznie się segue. Możesz to zobaczyć w "Inspektorze połączeń" przycisku na wyzwalanych kostkach.

Jeśli chcesz umieścić dane w docelowym kontroler widoku, możesz dodać brak działania do przycisku i umieścić dane w przygotowaniu do funkcji przełączania. Fajną rzeczą jest to, że wyzwolone seledy będą nadal wyzwalane z przycisku. Ta część będzie wyglądać następująco:

@IBAction func buttonPressed(_ sender: UIButton) { 
     someImportantData = "some data if needed" 
     //no need to trigger segue :) 
    } 

    //not your case, but in order to understand the sage of this approach 
    @IBAction func button2Pressed(_ sender: UIButton) { 
     someImportantData = "some data2 if needed" 
     //no need to trigger segue :) 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     //retrieve the destination view controller for free 
     if let myDestincationViewController = (segue.destination as? MyDestincationViewController) { 
      myDestincationViewController.someImportantData = someImportantData 
     } 
    } 

W ten sposób nie trzeba żadnych jawnie wpisanej ciągi dla identyfikatorów Segue, na identyfikatorach storyboard, itp i można nawet przygotować swój punkt docelowy kontroler w razie potrzeby.

Powiązane problemy