2012-03-23 13 views
6

Pracuję nad tym tutorial, który pokazuje, jak utworzyć aplikację ze scenorysami. Mój viewController ma dwa UIButtons i podłączyłem segue do tych UIButtonów. Te segues wypychają nowy viewController.Jak anulować przejście połączone z UIButtonem

Teraz szukam sposobu na anulowanie tej zmiany, jeśli spełniony jest pewien warunek. Kiedy użyłem starych plików XIB utworzyć mój interfejs byłem w stanie zrobić coś takiego:

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

To już nie działa. Jak mogę anulować naciśnięcie nowego kontrolera viewController?

+0

Twoje pytanie jest niejasne. W jaki sposób twoje elementy są podłączone? Gdzie jest kod, który sprawia, że ​​nawigacja "przechodzi do nowego widoku"? – Stavash

+0

Użytkownik może ręcznie anulować kliknięcie, przeciągając palec z przycisku przed zwolnieniem ... Czy to masz na myśli? Zgadzam się z powyższym komentarzem, to pytanie jest niejasne. –

+0

Musisz przeczytać samouczek, ukryty za linkiem, aby zrozumieć pytanie. Chodzi o przejście do storyboardu połączone z UIButtonem –

Odpowiedz

27

Nie. Nie można anulować segues, które są bezpośrednio połączone z elementami interfejsu, takimi jak UIButton.

Ale istnieje obejście.

  1. Zdjąć segue, który jest połączony z przyciskiem
  2. Dodaj segue od viewController (jednego z przyciskiem) do viewController który powinien być wciśnięty. Musi to być przejście, które nie jest połączone z elementem interfejsu. Aby to zrobić, możesz rozpocząć segue z paska stanu. Lub stwórz przejście na lewym pasku bocznym.
  3. Wybierz ten segue, otwórz inspektora atrybutów i zmień Identyfikator przejścia (na przykład PushRedViewController).
  4. Wybierz widok asystenta Xcodes, aby można było zobaczyć plik .h kontrolki viewController za pomocą przycisku.
  5. Podłącz przycisk do akcji. Aby to zrobić, wybierz przycisk i przeciągnij i przeciągnij do pliku .h. Wybierz działanie w menu i wymienić swoje działanie (np redButtonPressed :)
  6. Otwórz wdrożenie swojej viewController
  7. zmienić działanie od kroku 5 do mniej więcej tak:

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

Dzięki! Zadziałało. – Qooe

+2

Teraz możliwe dla ios5: http: // stackoverflow.com/questions/8066525/prevent-segue-in-prepareforsegue-method –

+0

@Matthias Bauch, Thanks !!! – shuiyouren

9

Można rzeczywiście to zrobić poprzez dodanie następującej metody w kodzie

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

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

    return YES; 
} 
else{ 
    return NO; 
} 

} 

pozwala zakładać swoje segue jest btnSegue.And jeśli ne ED segue być wykonywana na podstawie jakiegoś warunku można mieć następujący kod

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

Jeżeli kontrola jest BOOL, które można ustawić prawda czy fałsz na podstawie stanu.

+0

Dlaczego nie jest to zaakceptowana odpowiedź? – TahoeWolverine

+0

@TahoeWolverine Dzięki mogę odpowiedzieć na to pytanie nieco późno :) –