2012-07-19 3 views
9

Mam UIButton i próbuję połączyć go z dwoma segues. Który odcinek jest używany zależy od wielu warunków.ios - Podłącz jeden UIButton do 2 segues

Na przykład, gdy UIButton (z tytułem "next") powoduje

jeśli (warunki 1), a następnie przejść do ekranu A. W PRZECIWNYM WYPADKU Wróć na ekran B.

Wierzę, że mój kod jest poprawny (mimo to go zawarłem), ale problem polega na tym, że w widoku storyboardu mogę podłączyć jeden przycisk do tylko jednego kontrolera widoku przy użyciu segue. Jak to naprawić?

Oto kod używam -

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
     if([[segue identifier]isEqualToString:@"nextButtonID"]){ 
      creditCardViewController *cvc = [segue destinationViewController]; 
     } 
     else if([[segue identifier]isEqualToString:@"next2ButtonID"]){ 
      depositInfoViewController *divc = [segue destinationViewController]; 
     } 
} 

-(IBAction)nextClicked{ 
     if([accountType isEqualToString:@"patron"]){ 
      [self performSegueWithIdentifier:@"nextButtonID" sender:self]; 
     } 
     else{ 
      [self performSegueWithIdentifier:@"next2ButtonID" sender:self]; 
     } 
} 

Odpowiedz

17

W serii ujęć okna, przeciągnij kontrola z ikoną widok kontrolera na dole widoku i przeciągnij go do kontrolera widoku cel, dać AN Segue identyfikator i powtórzyć dla następnej zmiany.

+0

Ale robi się z viewController, a nie z przycisku. Jeśli zrozumiałem to poprawnie. –

+1

Zgadza się. Żadne kostki nie są "fizycznie" przymocowane do przycisku. –

+0

Scenariusz pozwala mi tylko ctrl + przeciągnąć z niego pojedynczy fragment. Po tym, jak jeden segue ma swoje źródło jako kontroler widoku, nie mogę już uczynić tego kontrolera widoku źródłem nowego segue. Czy to jest nowe? –

4

Nie trzeba wspomnieć dowolny kod w prepareForSegue chyba jeśli chcesz przekazać jakieś dane do innego kontrolera widoku

-(IBAction)nextClicked 
{ 
    if ([strCheck isEqualToString:@"launch Screen A"]) 
     { 
      UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 

      ScreenA *screenA = (ScreenA *)[storyboard instantiateViewControllerWithIdentifier:@"ScreenA"]; 
      [self.navigationController pushViewController:screenA animated:NO]; 

     } 
     else 
     { 

      UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 

      ScreenB *screenB = (ScreenB *)[storyboard instantiateViewControllerWithIdentifier:@"ScreenB"]; 

      [self.navigationController pushViewController:screenB animated:NO]; 

     } 
} 
1

Robiłem to często. Moja metoda polega na wykonaniu dwóch "ręcznych" seguesów.

  • W konstruktorze Interface ctrl + przeciągnięcie z widoku kontrolera 1 do widoku Controller 2
  • kliknąć na ten segue w IB i przejdź do właściwości i nazwać swój Identyfikator: nextButtonID
  • Tworzenie 2nd segue i postępuj te same kroki, nazywając je next2ButtonID

Potem kod powinien działać dobrze byłoby myślę. Natknąłem się na problemy, w których mam segretę od przycisku - I NASTĘPNIE - Próbuję też wywołać inną zmianę. Dzięki temu, że są to ogólne "kontroler-kontroler" segues, są one skonfigurowane tak, aby były wywoływane ręcznie, tak jak to robisz.

0

W Swift 3:

w scenorysie Ctrl-przeciągania tworzenia segues z SourceViewController do DestAViewController i DestBViewController, i nadaje każdemu segue identyfikator (na przykład "ToDestA" i "ToDestB"). Następnie:

@IBAction func onButton(_ sender: Any) { 
    if (testForA){ 
     self.performSegue(withIdentifier: "ToDestA", sender: Any?) 
    } else { 
     self.performSegue(withIdentifier: "ToDestB", sender: Any?) 
     } 
    }