15

Tengo un guión gráfico con un botón en un Control de vista de navegación, este control también tiene campos de texto, que usa el guión gráfico segue push. Sin embargo, tengo una verificación de entrada y le aviso al usuario si alguno de los campos de texto está vacío.Xcode storyboard cancelar push si no se cumple una condición

Puedo hacerlo, PERO alerta al usuario y luego cambia a la otra vista.

¿Hay alguna manera de cancelar este push si una condición if no se cumple en el botón Método presionado?

N.B Este impulso fue creado por la interfaz del guión gráfico, no por código.

Respuesta

28

La siguiente también puede ser usado y va a trabajar para diferentes tipos de segues como empuje, descansar, etc. Nombre la transición del Storyboard y el código que se da aquí. Devuelva NO para la condición si no desea que se realice la transición en particular y devuelva SÍ de forma predeterminada. Este método debe estar en el controlador de vista de origen.

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if ([identifier isEqualToString:@"Segue_Name"]) { 
     NSLog(@"Segue Blocked"); 
     //Put your validation code here and return YES or NO as needed 
     return NO; 
    } 

    return YES; 
} 
+3

Me gusta más que la respuesta aceptada. – bandejapaisa

+1

mucho mejor que la respuesta aceptada ... –

+0

Esto es mejor porque puede mantener la flecha de inserción en el guión gráfico y simplemente modificar esto para agregar las condiciones necesarias –

33

No cree la segue arrastrando desde el botón al controlador de destino. En su lugar, simplemente arrastre desde el controlador de origen al controlador de destino para crear un segue. Haga clic en el segue y use el inspector de atributos para especificar que el segue es un push y déle a segue un identificador (goToDestination). Luego, conecte el botón a un IBAction en el controlador de vista de fuente. En el método IBAction hacer su comprobación y si usted quiere hacer el empuje añadir esta línea de código:

[self performSegueWithIdentifier: @"goToDestination" sender: self]; 
+0

gracias mucho .... –

0

Si buttonAction es el método que tiene que ejecutar en el botón haga clic en lo que tiene que llamar dos métodos dentro de él 1. Método para comprobar las condiciones 2. Método para controlar el segue

- (IBAction)buttonAction:(id)sender 
    { 
    [self validateEnteredData]; 
    [self shouldPerformSegueWithIdentifier:kSegueName sender:sender]; 
    } 

su método de validación se busca la siguiente manera

-(void)validateEnteredData 
{ 
if (self.usernameTextField.text.length==0 && self.passwordTextField.text.length==0) 
{ 
    UIAlertView * alert=[[UIAlertView alloc]initWithTitle:kError message:kInvalidationMessage delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
    return; 
} 
else if (![self.usernameTextField.text isEqualToString:@"admin"] && ![self.passwordTextField.text isEqualToString:@"pass"]) 
{ 
    UIAlertView * alert=[[UIAlertView alloc]initWithTitle:kError message:kLoginFailed delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
    return; 
} 
} 

y segue pueden ser controlados por el siguiente segmento de código

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
{ 
if ([identifier isEqualToString:kSegueName]) 
{ 
//Validation: Return NO if you don't want to execute the segue action   
    if (self.usernameTextField.text.length==0 && self.passwordTextField.text.length==0) 
    { 
     return NO; 
    } 
    else if (![self.usernameTextField.text isEqualToString:@"admin"] && ![self.passwordTextField.text isEqualToString:@"pass"]) 
    { 
     return NO; 
    } 
} 

    return YES; 
} 
Cuestiones relacionadas