15

Ho uno storyboard con un pulsante in un Navigation View Control, questo controllo ha anche campi di testo, che utilizza lo storyboard seguito da push. Tuttavia, ho alcuni controlli di input e avviso all'utente se uno qualsiasi dei campi di testo è vuoto.Lo storyboard Xcode annulla il push se non viene soddisfatta una condizione

Posso farlo, MA avvisa l'utente e quindi passa all'altra vista.

C'è un modo per cancellare questo push se una condizione di if non è soddisfatta nel pulsante Metodo premuto?

N.B Questa spinta è stata creata dall'interfaccia dello storyboard, non dal codice.

risposta

28

Il seguente può essere utilizzato anche e lavorerà per i diversi tipi di segues come spinta, rilassarsi, ecc Nome il seguito dallo Storyboard e usa il codice fornito qui. Restituire NO per la condizione se non si desidera eseguire i particolari passaggi e restituire SÌ per impostazione predefinita. Questo metodo dovrebbe essere nel controller della vista sorgente.

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

Mi piace questo meglio della risposta accettata. – bandejapaisa

+1

molto meglio della risposta accettata ... –

+0

Questo è meglio perché puoi tenere la freccia di spinta nello storyboard e modificarla semplicemente per aggiungere le tue condizioni necessarie –

33

Non creare il seguito trascinando dal pulsante al controller di destinazione. Invece, è sufficiente trascinare dal controller sorgente al controller di destinazione per creare un seguito. Fare clic sul seguito e utilizzare l'ispettore attributo per specificare che il seguito è una spinta e fornire al seguito un identificatore (goToDestination). Quindi collega il pulsante a un IBAction nel controller della vista sorgente. Nel metodo IBAction fare il vostro controllo e se si vuole fare la spinta aggiungere questa riga di codice:

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

thanx un sacco .... –

0

Se buttonAction è il metodo che devono eseguire su fare clic sul pulsante si deve chiamare due metodi al suo interno 1. Metodo per verificare le condizioni 2. Metodo per controllare la segue

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

il vostro metodo di convalida sarà alla ricerca come segue

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

e segue può essere controllato dal seguente segmento di codice

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