2012-07-19 12 views
9

Ho un UIButton e sto cercando di collegarlo a due follower. Quale segue viene utilizzato dipende da un numero di condizioni.ios - Connetti un UIButton a 2 passaggi

Ad esempio, quando si preme l'UIButton (con il titolo "next"),

if (condizione 1) e poi passare alla schermata A. altro andare allo schermo B.

Credo che il mio codice sia corretto (l'ho incluso comunque), ma il problema è che nella visualizzazione dello storyboard, posso collegare un pulsante a un solo controller di vista usando un seguito. Come posso risolvere questo?

Ecco il codice che sto utilizzando -

-(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]; 
     } 
} 

risposta

17

Nella finestra storyboard, controllo di trascinamento dall'icona View Controller nella parte inferiore della vista e trascinarlo al controller della vista di destinazione, danno l'una segue identificatore e ripetere per i prossimi passaggi.

+0

Ma sta facendo dal viewController, non dal pulsante. Se l'ho capito correttamente. –

+1

Questo è corretto. Nessun seguès è "fisicamente" collegato al pulsante. –

+0

Lo storyboard consente solo a CTRL + trascinamento di un singolo passaggio da esso. Dopo che un seguito ha la sua origine come controller di visualizzazione, non posso più rendere a quel controller di visualizzazione la sorgente di un nuovo seguito. È nuovo? –

4

Non è necessario parlare di qualsiasi codice prepareForSegue a meno se si vuole passare alcuni dati ad altri controller di vista

-(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

ho fatto questo spesso. Il mio metodo è di fare due segues "manuali".

  • In Interface Builder Ctrl + trascinare dalla View Controller 1 a View Controller 2
  • Clicca su questo segue in IB e andare alle proprietà e nominare il suo Identifier: nextButtonID
  • Creare un secondo segue e seguire la stessa procedura di denominazione è next2ButtonID

Allora il vostro codice dovrebbe funzionare bene penserei. Mi sono imbattuto in problemi in cui ho un passaggio da un pulsante - E POI - Sto anche cercando di chiamare un seguito diverso. Avendo questi passaggi generali "controller-to-controller", sono configurati per essere chiamati manualmente come si sta facendo.

0

In Swift 3:

In Storyboard, Ctrl + trascina per creare segues da SourceViewController a DestAViewController e DestBViewController, e invia ogni Segue un identificatore (ad esempio "ToDestA" e "ToDestB"). Quindi:

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