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
È 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 = ...
}
}
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
}
}
ho già fatto, ma quando ho messo questo: PageScrollViewController * Controller = (PageScrollViewController *) segue.destinationViewController; controller.startStory = YES; l'app si arresta in modo anomalo – nonuma
*** 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
La parte strana è che il errore dice qualcosa su "setStartStory" ma non l'ho mai usato? Io uso startStory – nonuma