2012-07-19 11 views
9

Tengo un UIButton y estoy tratando de conectarlo a dos segmentos. Qué segue se usa depende de una serie de condiciones.ios - Conecte un UIButton a 2 segues

Por ejemplo, cuando se pulsa el UIButton (con título "next"),

si (condición 1), entonces ir a la pantalla A. demás ir a la pantalla B.

Creo que mi código es correcto (lo he incluido de todos modos), pero el problema es que en la vista del guión gráfico, puedo conectar un botón a un solo controlador de vista usando un segue. Cómo puedo solucionar esto ?

Aquí está el código que estoy usando -

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

Respuesta

17

En la ventana del guión gráfico, control de arrastre desde el icono del controlador de la vista en la parte inferior de la vista y se arrastra al controlador de vista de destino, dan la una segue identificador, y repita para el próximo cambio.

+0

Pero está haciendo desde viewController, no desde el botón. Si lo entendí correctamente –

+1

Eso es correcto. No hay segues conectados 'físicamente' al botón. –

+0

El guión gráfico solo me permite presionar + arrastrar un único segue desde él. Después de que un segue tiene su fuente como controlador de vista, ya no puedo convertir ese controlador de vista en el origen para un nuevo segue. ¿Es esto nuevo? –

4

No es necesario mencionar ningún código en prepareForSegue a menos que si desea pasar algunos datos a otro controlador de 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

que he hecho esto a menudo. Mi método es hacer dos segues "manuales".

  • En Interface Builder Ctrl + arrastre desde Vista Controlador 1 a Vista Controlador 2
  • Haga clic en este segue en IB y ir a las características y el nombre de su identificador: nextButtonID
  • Crear un segundo segue y seguir los mismos pasos de nombres que next2ButtonID

A continuación, el código debería funcionar bien yo creo. Me he encontrado con problemas en los que tengo una transición desde un botón, Y LUEGO, también intento llamar a un cambio diferente. Al tener estos ser segmentados generales de "controlador a controlador", se configuran para que se llamen manualmente mientras lo hace.

0

En Swift 3:

En el Storyboard, ctrl + arrastre para crear segues SourceViewController-DestAViewController y DestBViewController, y dar a cada Sègue un identificador (por ejemplo, "ToDestA" y "ToDestB"). Entonces:

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