Nel contesto di ARC, ecco una possibile soluzione:
NSMutableArray* navArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
[navArray replaceObjectAtIndex:[navArray count]-1 withObject:nextViewController];
[self.navigationController setViewControllers:navArray animated:YES];
Come si può dire, questo codice sostituisce il codice spinta al solito nella vista si sta cercando di rimuovere dalla pila ("B" nella tua domanda). La riga 1 copia l'elenco di controller di visualizzazione dallo stack del controller di navigazione in uno NSMutableArray
. La riga 2 sostituisce l'ultima (in alto) vista con la vista che vogliamo andare al prossimo ("C"). La riga 3 rende lo stack effettivo del controller di navigazione come il nostro array modificato, e anima la transizione all'elemento più in alto. (Naturalmente, non è possibile utilizzare questo codice nella viewController radice.)
ho trovato un modo alternativo here e adattato per ARC:
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:someViewController animated:YES];
La prima riga è necessario perché una volta che hai spuntato la vista corrente fuori dallo stack, self.navigationController
, sarà nil
e la terza riga non funzionerà. Stesso numero di linee del modo precedente, ma funziona in questo modo attraverso i metodi integrati invece di "manualmente" giocherellare con lo stack.
Qualche idea su come farlo con ARC abilitato? Il compilatore non consente l'uso di 'retain' – asdasd
@Oscar, vedere la mia soluzione, [di seguito] (http://stackoverflow.com/a/17328244/1431728). – JohnK