2010-12-01 39 views
1

Mon application dispose de deux modes distincts. Il y a un contrôleur de barre d'onglets dans le délégué de l'application. Il y a deux onglets, tous deux utilisant des contrôleurs de vue sous-classés. Les deux contrôleurs de vue contiennent essentiellement un contrôleur de navigation. Les contrôleurs de navigation ont leur contrôleur de vue racine, et normalement quand je change d'écran, je viens de pousser et d'ouvrir les contrôleurs du contrôleur de navigation respectif. Cela a l'effet (normal) que la barre d'onglets du bas est toujours visible, tout est génial et sain.Problème avec "Présentation modale d'un contrôleur dans un contrôleur de navigation dans un contrôleur de barre d'onglets"

Cette fois je voudrais présenter un écran modalement cependant, de sorte que l'utilisateur ne peut rien faire d'autre que confirmer ou annuler la page en utilisant deux boutons, je veux cacher aussi la barre d'onglet du bas. Ce serait un cas pour présenter la vue modalement je pensais, mais la vue est présentée dans les limites de contrôleur de nav il semble, de sorte que la barre d'onglets inférieure est encore visible, et cela provoque une confusion dans la navigation de l'application. Je ne suis pas sûr de savoir comment il est possible que la vue présentée de façon modale ne cache pas la barre d'onglets. La plupart des questions ici semblent avoir le problème inverse (vouloir présenter (incorrectement) une vue modale et laisser la barre d'onglets visible).

Ce sont mes tentatives:

[self presentModalViewController:controller animated:YES]; // inside tab bar controller :-(
[self.tabBarController presentModalViewController:controller animated:YES]; // nothing is displayed. The new controller is instantly deallocated. 
[self.navigationController presentModalViewController:controller animated:YES]; // inside tab bar controller :-(

enquêtaient sur cette, le self.tabBarController est en fait nul. Il semble n'y avoir aucun lien vers le contrôleur de la barre d'onglets ... Je suppose, pour afficher modalement au-dessus de la barre d'onglets, je dois obtenir un lien vers ce contrôleur de barre d'onglets?

Répondre

1

Je semble avoir trouvé une solution, je ne suis pas sûr que ce soit casher, parce que je n'étais pas capable d'utiliser le pointeur self.tabBarController du contrôleur de vue dans lequel je lance l'appel du contrôleur de vue. Ce que j'ai fait, c'était atteindre pour le délégué de l'application, le délégué de l'application ayant le contrôleur de la barre d'onglets défini comme une propriété publique. Je pourrais utiliser cette propriété de contrôleur de barre d'onglets pour afficher modalement mon contrôleur de vue sur tout à l'écran.

+0

C'est la seule façon que j'ai trouvé pour le faire. De là, vous pouvez ajouter la sous-vue à la fenêtre plutôt que de traiter directement avec le contrôleur de la barre d'onglets, puisque [window addSubview: yourModalViewController.view]; cela se produit après que votre tabbar a été ajouté le mettra en avant. –

+0

Peut-être, je commence lentement à l'obtenir. D'une perspective descendante, ma structure est: AppDelegate-> TabBarController-> ViewController-> NavController-> ViewController (+ ViewControllers présentés modalement). Le problème avec cette structure devrait bien sûr être, NavControllers ne devrait pas être ajouté aux ViewControllers normales, comme documenté dans le premier paragraphe à http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CombiningViewControllers/CombiningViewControllers.html # // apple_ref/doc/uid/TP40007457-CH104-SW1 Je suppose que je * devrais * ajouter des contrôleurs NavBar au jeu de barres d'onglets. – Jonny