2012-03-23 17 views
6

Sto lavorando a questo tutorial, che mostra come creare un'app con gli storyboard. Il mio viewController ha due UIButtons e ho collegato un seguito a quegli UIButtons. Questi passaggi spingono una nuova viewController.Come annullare un evento connesso a un UIButton

Ora sto cercando un modo per cancellare questo segue se una certa condizione diventa vera. Quando ho usato i vecchi file XI ter per creare la mia interfaccia ero in grado di fare qualcosa del genere:

-(IBAction)sendButton:(id)sender { 
    if(TRUE) { 
    // STOP !! 
    } 
} 

Questo non funziona più. Come posso cancellare la spinta del nuovo viewController?

+0

La tua domanda non è chiara. Come sono collegati i tuoi elementi? Dov'è il codice che rende la navigazione "andare a una nuova vista"? – Stavash

+0

L'utente può annullare manualmente una risposta di clic trascinando il dito fuori dal pulsante prima di rilasciarlo ... È questo che intendi? Sono d'accordo con il commento di cui sopra, questa domanda non è chiara. –

+0

Devi leggere il tutorial, nascosto dietro il link, per capire la domanda. Si tratta di uno storyboard seguito da un UIButton –

risposta

27

No. Non è possibile cancellare segues direttamente collegati ad elementi dell'interfaccia come UIButton.

Ma c'è una soluzione alternativa.

  1. Rimuovere la segue che è collegato al pulsante
  2. Aggiungere un segue dalla viewController (quello con il tasto) per il viewController che dovrebbe essere spinto. Questo deve essere un seguito che non è connesso a un elemento dell'interfaccia. Per fare ciò puoi iniziare il seguito dalla barra di stato. O crea il seguito nella barra laterale di sinistra.
  3. Selezionare questo segue, aprire l'ispettore attributi e modificare l'identificatore del seguito (ad esempio PushRedViewController)
  4. Selezionare la vista dell'assistente Xcodes, in modo da poter visualizzare il file .h del viewController con il pulsante.
  5. Collegare il pulsante a un'azione. Per fare ciò selezionare il pulsante e control-drag sul file .h. Selezionare l'azione nel menu e assegnare un nome al di azione (ad esempio redButtonPressed :)
  6. Aprire l'attuazione del vostro viewController
  7. modificare l'azione dal punto 5 a qualcosa di simile a questo:

    - (IBAction)redButtonPressed:(id)sender { 
        [self performSegueWithIdentifier:@"PushRedViewController" sender:sender]; 
    } 
    
+0

Grazie !! Ha funzionato. – Qooe

+2

Ora possibile per ios5: http: // stackoverflow.it/questions/8066525/prevent-segue-in-preparaforsegue-metodo –

+0

@Matthias Bauch, grazie !!! – shuiyouren

9

Puoi effettivamente fare questo con l'aggiunta seguente metodo nel codice

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 

if([identifier isEqualToString:@"btnSegue"]) 
{ 

    return YES; 
} 
else{ 
    return NO; 
} 

} 

lascia supporre il tuo segue è btnSegue.And se ne Ed il segue da svolgere sulla base di alcune condizioni si possono avere seguente codice

if(check) 
{ 
[self performSegueWithIdentifier:@"btnSegue" sender:self]; 
} 

Dove controllo è BOOL cui è possibile impostare vere o false in base alla condizione.

+0

Perché questa non è la risposta accettata? – TahoeWolverine

+0

@TahoeWolverine Grazie potrebbe essere che ho risposto alla domanda in ritardo :) –

Problemi correlati