2015-10-29 7 views
11

Ho una navigazione a 3 viewcontroller in cui A presenta il controller modale B, che presenta il controller modale C in tutti i passaggi successivi. C ha uno svolgimento a ritroso a B. Ha anche uno stacco indietro a A. Quando eseguo l'azione per C per rilassarsi in B, si svolge ma poi fa scattare B e torna ad A. Questo non è quello che voglio, voglio in questo caso resta su B. Di seguito vengono utilizzati i segui utilizzati da VC C.Unwind Segue iOS risale a 1 troppi VC

unwind segues from VC C

unwindCancel è per quando l'utente fa clic su un collectionViewCell e risale al VC B. prepareForUnwind è solo uno standard pulsante "Annulla" per VC A.

Qui di seguito è il codice per chiamare didSelectItem di svolgimento in VC C. Qui di seguito che è prepareForSegue in VC C.

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ 
[self performSegueWithIdentifier:@"unwindCancel" sender:self]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if ([segue.identifier isEqualToString:@"unwindCancel"]) { 
     GalleryDetailViewController *detailVC = segue.destinationViewController; 
     detailVC.colletionCount = self.indexPathToPass; 
    } 
} 

VC B rilassarsi in un file .m

-(IBAction)unwindCancel:(UIStoryboardSegue *)segue{ 

    [self.collectionView scrollToItemAtIndexPath:self.colletionCount atScrollPosition:UICollectionViewScrollPositionLeft animated:YES]; 
} 

VC Un rilassarsi nel file di .m

-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue { 
} 

risposta

3

Quando si passa da C a B, non utilizzare un segue rilassarsi semplicemente C chiamata dismissViewController. Se ti sei impegnato a utilizzare i segui di unwind, guarda in particolare la sezione here Come un Segmento di Svolgimento Determina il suo Controller di Visualizzazione di Destinazione

2

Immagino che tu abbia confuso un identificatore di unwind-segue con il metodo di azione di unwind-segue.

Se si crea un unwind-segue con l'azione "prepareForUnwind", e quindi si modifica l'identificatore di unwind-segue su "unwindCancel". Il problema si presenterebbe.

Assicurati solo che l'identificatore di unwind-segue corrisponda al suo metodo di azione.

+1

Ci sono 2 segui di svolgimento da C - uno indietro a B e uno indietro a A. – noobsmcgoobs

+1

@noobsmcgoobs Ho ricreato la tua demo, il problema non esiste.Così immagino che dai il nome di un nome errato.Put "nslog "nei tuoi due metodi di svolgimento, e vedi quale è chiamato. – wj2061

+0

@noobsmcgoobs Questo post è simile al tuo: http: //stackoverflow.com/q/33181577/4975761 – wj2061

Problemi correlati