2012-01-24 15 views
12

W zależności od wyniku XML, nie chcę, aby bieżący segue działał na dotyk UIButton.ios segue "anuluj"

wiem, że mogę wybrać, które segue Chcę wykonać, ale jak robię seguenie wykonać? Lub przynajmniej nie wykonać żadnego z dostępnych ?

Odpowiedz

25

Jeśli twoim celem wdrożenia jest iOS 6.0 lub nowszy, można zastąpić the -[UIViewController shouldPerformSegueWithIdentifier:sender:] method wrócić YES jeśli chcesz wykonać segue i NO jeśli nie.

Jeśli cel wdrożenia jest wcześniejszy niż iOS 6.0, wiadomość shouldPerformSegueWithIdentifier:sender: nie zostanie odebrana. Więc w swoim scenorysie nie rysuj przejścia z przycisku. Zamiast tego narysuj przejście z kontrolki widoku przycisku i nadaj identyfikatorowi segue. Podłącz przycisk do urządzenia IBAction w swoim sterowniku widoku. W akcji sprawdź, czy chcesz wykonać przejście. Jeśli chcesz go wykonać, wyślij sobie performSegueWithIdentifier:sender:, przekazując identyfikator przypisany do segue w scenorysie.

+0

jest " [self performSegueWithIdentifier: @ "myIdentifier" sender: self]; 'correct? Xcode daje mi 'SIGABRT' :( – Jacksonkr

+0

Musisz ustawić punkt przerwania wyjątku, aby zobaczyć, co się nie zgadza –

3

Apple Developer Documentation ma właściwą metodę, aby anulować segue, który jest zarządzany w Storyboard:

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

Na przykład:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if ([identifier isEqualToString:@"listPopover"]) { 
     if (self.listPopover == nil) { 
      // Allow the popover segue 
      return YES; 
     } 
     // Cancel the popover segue 
     return NO; 
    } 
    // Allow all other segues 
    return YES; 
} 
+0

Komunikat' shouldPerformSegueWithIdentifier: sender: 'został dodany w systemie iOS 6 i nie będzie wysyłany na urządzeniach z wcześniejszą wersją iOS Po wysłaniu tego pytania system iOS 6 nie został wydany. –