2013-04-23 32 views
8

Mam dwie segue, które prowadzą do tego samego viewController. Dostępne są 2 przyciski, które są połączone z tym samym viewController za pomocą 2 segues. W tym viewController muszę sprawdzić, który przycisk został kliknięty. Tak więc muszę sprawdzić, który fragment został użyty/wstępnie uformowany. Jak mogę to sprawdzić w klasie viewControllers? Wiem, że istnieje metoda prepareForSegue, ale nie mogę tego użyć do mojego celu, ponieważ muszę umieścić prepareForSegue w klasie, w której znajdują się 2 przyciski, i nie chcę jej tam, ale chcę ją w klasie viewControllers, ponieważ muszą uzyskać dostęp i ustawić niektóre zmienne w tej klasie.Jak sprawdzić, który segment został użyty?

Odpowiedz

8

trzeba ustawić zmienną drugi viewcontroller w metodzie prepareforsegue pierwszej. Oto, jak to się robi:

Następnie możesz sprawdzić tę właściwość w drugim vc, aby zrozumieć, skąd się tam wziąłeś. Jeśli masz 2 segues w storybooku dla 2 przycisków, wystarczy tylko identyfikator segue, aby ustawić odpowiednią wartość właściwości. Następnie kod zamienia się w ten sposób:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:segueIdentifier1]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     secondVC.identifyingProperty = ... 
    } 
    else if([segue.identifier isEqualToString:segueIdentifier2]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     secondVC.identifyingProperty = ... 
    } 
} 
+0

Zrobiłem to, ale kiedy kładę to: PageScrollViewController * kontroler = (PageScrollViewController *) segue.destinationViewController; controller.startStory = YES; aplikacja się zawiesza – nonuma

+0

*** Zamykanie aplikacji z powodu nieprzechwyconego wyjątku "NSInvalidArgumentException", powód: '- [UIViewController setStartStory:]: nierozpoznany selektor wysłany do instancji 0x9976420' *** Stos wywoławczy pierwszego rzutu: – nonuma

+0

Dziwne jest to, że błąd mówi coś o "setStartStory", ale nigdy tego nie używałem? Używam programu startStory – nonuma

2

Najpierw należy ustawić identyfikator segues bezpośrednio w skrzynkach lub za pomocą kodu przy użyciu metody performSegueWithIdentifier. Niezależnie sposób, w jaki wybrałem, kontroler widok zadziała następujący sposób, więc trzeba przesłonić to wiedzieć, które segue została wysyłania wiadomości, robisz tak:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
     if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierOne"]) { 
      // button 1 
     } 
     if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierTwo"]) { 
      // button 2 
     } 
} 
Powiązane problemy