Je rencontre un problème lors de la définition de la sortie de vue par défaut d'View Nib View Controller dans Interface Builder. Voici ma configuration:UINavigationController NIB nécessite que le propriétaire du fichier ait une vue?
J'ai une application TabBar où je charge un contrôleur de navigation en vue modal ...
MyNavCtrlrSubClass *menu = [[MyNavCtrlrSubClass alloc]initWithNibName:@"MenuController" bundle:nil];
[tabBarController presentModalViewController:menu animated:anim];
MenuController lui-même est structuré comme suit:
MenuController.xib File's Owner (MyNavCtrlrSubClass : UIViewController) Navigation Controller (UINavigationController) Navigation Bar (UINavigationBar) Root View Controller (Nib Name is set to load AnotherViewController.nib) Navigation Item -> (UINavigationItem)
Tout cela fonctionne correctement, sauf que lorsque MyNavCtrlrSubClass est chargé, j'obtiens l'erreur suivante:
Loaded the "MenuController" nib but the view outlet was not set
La raison pour laquelle cela se produit est claire: le propriétaire du fichier ne dispose pas d'une connexion de sortie pour sa vue. La question est ce que je devrais définir comme son point de vue, et quelque chose doit être mis en place en premier lieu? La barre de navigation est le seul candidat dans MenuController.xib, mais en faisant cela, il suffit de dimensionner UINavigationBar lui-même en mode plein écran, pour ainsi dire.
Je suis évidemment manquer quelque chose dans IB, mais quoi? MyNavCtrlrSubClass.m n'a pas de code lui-même, sauf un IBOutlet pour UINavigationController. Est-ce que je fais une erreur en essayant de tout mettre en place dans IB? L'idée est de garder le contrôleur de navigation modal en une seule plume, et toutes les vues qu'il charge dans des plumes séparées, mais comme MenuController est juste un conteneur pour la navigation et ne contient pas de vues, je le conçois mal. :)
Si vous vous demandez pourquoi je ne le conçois pas d'une autre manière, c'est parce que j'essaie d'obéir à ma perception (peut-être erronée) de la façon dont IB vous demande de construire une hiérarchie idéale.
Toute aide serait grandement appréciée.
Merci pour votre réponse informative! Je suis sur le point de voir ce que je peux faire avec cela, et je reviendrai bientôt. Pour l'instant, laissez-moi vous demander: comment chargeriez-vous une nib de contrôleur de navigation modale, en concevant autant que possible dans Interface Builder? Est-il nécessaire, comme dans votre exemple, de configurer une puce View Controller, puis de créer le contrôleur de navigation par programmation, ou puis-je définir la hiérarchie de vue dans IB uniquement? –
NOTE: il semble que la création programmatique du contrôleur de navigation signifierait que je dois également programmer sa propre hiérarchie de contrôleurs de vue par programmation, puis je m'éloigne de plus en plus de IB, en commençant par le contrôleur de navigation. –
Vous pouvez créer un contrôleur de navigation et un contrôleur de vue racine dans le code et charger la vue du contrôleur de vue racine dans IB. Ce ne sera pas gênant. Vous pouvez également créer le contrôleur de navigation et son contrôleur de vue racine dans un XIB distinct de l'affichage du contrôleur de vue racine. Cette XIB distincte est généralement le MainWindow.xib. Lorsque le fichier MainWindow.xib est chargé, les deux contrôleurs de vue seront créés. Lorsque le contrôleur de vue racine a d'abord besoin de sa vue, il le chargera à partir du second fichier XIB. C'est la façon typique de le faire. –