2013-04-23 3 views
8

Ho ottenuto due passaggi che portano allo stesso viewController. Ci sono 2 pulsanti che sono collegati allo stesso viewController utilizzando 2 passaggi. In quel viewController ho bisogno di controllare quale pulsante è stato cliccato. Quindi, in realtà, ho bisogno di verificare quali sono stati i passaggi usati/preformati. Come posso verificarlo nella classe viewControllers? So che esiste il metodo prepareForSegue, ma non posso utilizzarlo per il mio scopo perché devo inserire lo prepareForSegue nella classe in cui sono presenti i 2 pulsanti, e non lo voglio lì ma lo voglio nella classe viewControllers perché io bisogno di accedere e impostare alcune variabili in quella classe.Come verificare quali passaggi sono stati utilizzati

risposta

8

È necessario impostare una variabile di il secondo viewcontroller nel metodo prepareforsegue del primo. Questo è come è fatto:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:segueIdentifier1]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     if(sender.tag == ...) // You can of course use something other than tag to identify the button 
     { 
      secondVC.identifyingProperty = ... 
     } 
     else if(sender.tag == ...) 
     { 
      secondVC.identifyingProperty = ... 
     } 
    } 
} 

Quindi è possibile controllare che la proprietà nel secondo vc per capire come si è venuto lì. Se sono stati creati 2 segui nello storyboard per 2 pulsanti, solo l'identificatore della sequenza è sufficiente per impostare il valore della proprietà corrispondente. Poi il codice si trasforma in questo:

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

ho già fatto, ma quando ho messo questo: PageScrollViewController * Controller = (PageScrollViewController *) segue.destinationViewController; controller.startStory = YES; l'app si arresta in modo anomalo – nonuma

+0

*** Termina l'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: '- [UIViewController setStartStory:]: selettore non riconosciuto inviato all'istanza 0x9976420' *** Primo stack di chiamate throw: – nonuma

+0

La parte strana è che il errore dice qualcosa su "setStartStory" ma non l'ho mai usato? Io uso startStory – nonuma

2

Quindi, in primo luogo è necessario impostare l'identificatore dei segui direttamente in storyborads o attraverso il codice utilizzando il metodo performSegueWithIdentifier. Indipendentemente il modo in cui avete scelto, il vostro controller della vista sarà fuoco il seguente metodo, quindi è necessario eseguire l'override per sapere che segue stava inviando il messaggio, si fa in questo modo:

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