IOS ViewController chemin de navigation - comment naviguer dans le dos par programmation
Je suis en utilisant IOS5 Storyboard. Mon point de Vue, Contrôleur de chemin est comme suit:
tabbarVC --> navigationVC-1 --> tableVC-1 --(via segue push)-> tableVC-2 --(via segue modal)-> navigationVC-2 --> tableVC-3
Dans le bouton annuler rappel de la méthode d'action dans tableVC-3-je appeler [self dismissViewControllerAnimated:YES completion:nil];
qui réussit à me ramener à l'tableVC-2. Cependant, lorsque j'essaie d'examiner le chemin de navigation en arrière dans le débogueur, je ne vois pas un moyen d'accéder à tableVC-2 à partir de navigationVC-2. Je m'attendais à navigationVC-2 pour maintenir un lien pour tableVC-2 ou navigationVC-1, mais il ne semble pas. Veuillez voir ma sortie du débogueur ci-dessous.
Quelqu'un peut m'expliquer la hiérarchie de navigation et la façon de parcourir la chaîne vers l'arrière par programmation?
(gdb) po self
<tableVC-3: 0x6d33340>
(gdb) po (UIViewController*) [self navigationController]
<UINavigationController: 0x6d33560>
(gdb) po (UIViewController*)[[self navigationController] navigationController]
Can't print the description of a NIL object.
(gdb) po (UIViewController*)[[self navigationController] topViewController]
<tableVC-3: 0x6d33340>
(gdb) po (UIViewController*)[[self navigationController] presentingViewController]
<UITabBarController: 0x6b2eba0>
(gdb) po (UIViewController*)[[self navigationController] presentedViewController]
Can't print the description of a NIL object.
(gdb) po (UIViewController*)[[self navigationController] visibleViewController]
<tableVC-3: 0x6d33340>
OriginalL'auteur mpprdev | 2012-01-02
Vous devez vous connecter pour publier un commentaire.
C'est une vieille question, mais juste pour aider quelqu'un d'autre qui vient à travers cette question, il y a une seule commande qui allez faire votre vie plus facile..
Facile lorsque vous tomberez sur le bon de commande, n'est-ce pas !
Donc, en supposant que vous avez eu une série de trois écrans dans une manette de Navigation, et sur la troisième écran que vous vouliez le bouton "Retour" pour revenir à la initiale écran.
OriginalL'auteur Mike Gledhill
Après quelques recherches à l'aide de ce et une couple d'autres questions modale UIViewControllers dans la table de montage séquentiel pour revenir à deux points de vue, j'ai utilisé
[self.navigationController.navigationController popToRootViewControllerAnimated:YES];
. La structure était comme: manette de Navigation -> TableView -> (via push segue) -> manette de Navigation -> View Controller. Cela a fonctionné avec moi! En outre, il m'a permis de découvrir comment les choses fonctionnent.OriginalL'auteur Knightsy
Aller jeter un vieux la réponse difficile de le mettre à jour pour être plus complet.
Pour répondre à cette question :
La structure de votre navigation :
Peut être expliquer comme ceci :
Le TabbarVC est de montrer que c'est "selectedViewController' (navigationVC-1).
NavigationVC-1 a sa pile de navigation composer de TableVC-1 et TableVC-2 (topViewController de NavigagtionVC-1)
Puis NavigationVC-2 est présenté sous forme modale sur le tabbarVC, donc tabbarVC est le
presentingViewController
et NavigationVC-2 est lepresentedViewController
Ainsi afin d'atteindre tableVC-2 à partir de tableVC-3 vous aurez besoin de faire quelque chose comme ceci :
(ne fais pas que dans le code de production)
[tableVC-3 presentingViewController]
ainsi que[tableVC-3.navigationController presentingViewController]
va vous redonner leUITabBarController
.Si vous utilisez un UINavigationController vous devez utiliser c'est
push
etpop
méthode pour mettre UIViewController sur ou hors de la "présentation de la pile".Vous serez en mesure d'accéder à la
UINavigationController
de ceuxUIViewController
comme ceci:Si vous voulez revenir plus que l'un
UIViewController
sur la "présentation de la pile" vous pouvez utiliser cette méthode sur leUINavigationController
De rejeter une UIViewController qui a été présenté modal, la
UIViewController
qui ont présenté il besoin de le rejeter avec :Donc, dans ce cas, il doit être :
merci pour les commentaires. Sans la 2e vl contrôleur, le "modal" type segue ne semble pas fonctionner (application se bloque).
Ok je comprends, je suis moins d'utilisation d'enchaîner. Vous ne voulez pas aller en arrière, vous souhaitez rejeter votre modal de la présentation.
Pas lié à la question mais merci, j'ai été à la recherche pour le menu de la fonction pour un certain temps, mais n'avait pas trouvé la manette de navigation (était à la recherche dans le contrôleur de parent... Maintenant tout est cense
Une petite remarque: si vous souhaitez revenir à l'affichage précédent, sans le passant comme paramètre, vous pouvez simplement utiliser le code suivant: [[auto navigationController] popViewControllerAnimated:YES];
OriginalL'auteur Vincent Bernier
Swift
Si vous utilisez une manette de navigation que vous pouvez revenir à la vue précédente contrôleur avec
ou pour revenir à la racine de la vue-contrôleur avec
OriginalL'auteur Suragch