2012-07-19 15 views
9

Ich habe eine UIButton und ich versuche, es mit zwei Segmenten zu verbinden. Welcher Abschnitt verwendet wird, hängt von einer Anzahl von Bedingungen ab.ios - Verbinde eine UIButton mit 2 Segmenten

Zum Beispiel, wenn der UIButton (mit dem Titel "next") gedrückt wird,

if (Bedingung 1) geht dann auf Bildschirm A. sonst geht B. zu screenen

Ich glaube, dass mein Code korrekt ist (ich habe ihn sowieso eingefügt), aber das Problem ist, dass ich in der Storyboard-Ansicht einen Button mit nur einem View-Controller verbinden kann, indem ich ein Segment verwende. Wie behebe ich das?

Hier ist der Code, den ich mit -

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

Antwort

17

Im Storyboard-Fenster, Steuer ziehen aus dem View-Controller-Symbol auf dem unteren Rand der Ansicht und ziehen Sie es an das Ziel-View-Controller, geben die Segue ein Bezeichner, und wiederholen Sie für den nächsten Abschnitt.

+0

Aber es geht von der ViewController, nicht von der Schaltfläche. Wenn ich es richtig verstanden habe. –

+1

Das ist richtig. Keine Übergänge sind "physikalisch" an den Knopf gebunden. –

+0

Das Storyboard erlaubt mir nur das Ziehen und Ziehen eines einzelnen Segments. Nachdem ein Segment seine Quelle als View-Controller hat, kann ich diesen View-Controller nicht mehr als Quelle für ein neues Segment verwenden. Ist das neu? –

4

Sie brauchen keinen Code in prepareForSegue zu erwähnen, es sei denn, wenn Sie

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

ich getan habe dies oft einige Daten an andere View-Controller übergeben werden soll. Meine Methode besteht darin, zwei "manuelle" Übergänge zu machen.

  • im Interface Builder ctrl + Ziehen von View Controller 1 Controller 2
  • Klicken Sie auf diese Segue in IB und gehen Sie auf Eigenschaften anzeigen und seine Bezeichnernamen: nextButtonID
  • ein 2. segue Erstellen und folgen die gleichen Schritte Namensgebung next2ButtonID

Dann sollten sie den Code funktionieren würde ich denken. Ich bin auf Probleme gestoßen, in denen ich einen Übergang von einem Knopf habe - UND dann - ich versuche auch, einen anderen Übergang zu nennen. Da es sich hierbei um allgemeine "Controller-zu-Controller" -Segmente handelt, werden sie so eingerichtet, dass sie manuell aufgerufen werden.

0

In Swift 3:

im Storyboard, ctrl + Drag Segues aus SourceViewController zu DestAViewController und DestBViewController zu erstellen und geben jeweils einen Identifikator segue (z.B. "ToDestA" und "ToDestB"). Dann:

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