1

J'ai quatre UINavigationControllers assignés chacun à un onglet dans un UITabBarController. Chaque UINavigationController gère un UIViewController, qui peut lui-même se ramifier dans d'autres UIViewControllers en dessous de lui de manière hiérarchique. Ma question est, dans le cas où un utilisateur, sous un onglet, a navigué vers un UIViewController qui se trouve ci-dessous le UIViewController principal géré par le UINavigationController, puis l'utilisateur appuie sur un onglet différent, puis revient à l'onglet original, COMMENT puis-je faire en sorte que l'utilisateur soit présenté avec le UIViewController principal géré par le contrôleur UINavigation? et pas la page où il s'est arrêté?Comment les utilisateurs font-ils apparaître leurs piles UINavigationController sous un UITabBarController?

UITabBarController est mis en place dans IB

Répondre

7

Mettre en oeuvre le protocole UITabBarControllerDelegate et pop au contrôleur racine chaque fois que votre délégué est informé que l'utilisateur a sélectionné un autre onglet.

Quelque chose comme:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    [viewController.navigationController popToRootViewControllerAnimated:YES]; 
} 

Le code ci-dessus devrait apparaître au contrôleur racine de tout contrôleur de navigation qui est le contrôleur principal de vue de l'onglet nouvellement sélectionné. Vous pouvez essayer d'implémenter le protocole dans votre délégué d'application. Et n'oubliez pas d'affecter le délégué de l'application en tant que délégué du contrôleur de la barre d'onglets.

+0

pourriez-vous être plus précis? Tous mes UINavigationControllers ne sont pas programmatiques mais sont uniquement dans IB. Ai-je besoin de les sous-classer? – RexOnRoids

+0

Non, il suffit d'utiliser self.navigationController –

+0

J'ai ajouté du code et des détails à ma réponse. Notez que je ne l'ai pas essayé moi-même, mais cela devrait marcher dans ce sens. –

2

n'a pas fonctionné pour moi à l'origine, puis plus tard j'ai remarqué que tous mes viecontrollers pour différents onglets sont UINavigationControllers en fait

et donc j'ai modifié le code ci-dessus un peu comme suit, et cela a fonctionné:

[(UINavigationController *)viewController popToRootViewControllerAnimated:NO]; 
Questions connexes