Comment ajouter un contrôleur de navigation avec Interface Builder?
1. Étape: Créer un nouveau UIViewController:
- Xcode -> Nouveau Fichier... -> Cocoa Touch Classe -> UIViewController
- Nom: MyViewController
2. Étape: Glisser et de déposer une "Navigation Controller" (UINavigationController) à partir de la Bibliothèque de MyViewController.xib
3.Étape: j'en suis sûr, je dois faire quelque chose pour connecter la manette de Navigation correctement, n'est-ce pas?
4.Étape: Essayez de démarrer la nouvelle Vue Contrôleur comme une boîte de dialogue modale:
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
NSLog(@"navContr: %@", myViewController.navigationController);
[self.navigationController presentModalViewController: myViewController animated:YES];
Résultat: "navContr: nil"
5.Étape: Vous pouvez voir le nouveau modal vue (MyViewController), mais il n'y a pas NavigationController et pas de UINavigationBar.
Merci beaucoup pour votre aide!
Mise à JOUR 1:
6.Étape: j'ai mis un nouveau UIViewController (ViewNavi2) en tant que "Root-Vue-Contrôleur":
7.Étape: de définir une IBOutlet UINavigationController *navigationController
dans la classe MyViewController et configurer le xib: manette de Navigation -> Connexions -> Référencement des points de vente
Mais ma manette de Navigation est toujours nul 🙁
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
NSLog(@"navContr: %@", myViewController.navigationController);
//-> "navContr: nil"
source d'informationauteur Manni
Vous devez vous connecter pour publier un commentaire.
Je voulais aussi inclure la manette de navigation dans le fichier NIB, mais tout ce que la documentation d'Apple a dit qu'il "n'est pas optimale", sans vraiment expliquer comment le faire. Je voulais que mes principaux onglets de la fenêtre pour appeler une fenêtre modale contenant le typique contrôles de navigation, sans définir la manette de navigation par programmation. Je vais partager la façon dont je l'ai fait.
Votre code est très similaire à la mienne, que j'ai également défini un
IBOutlet UINavigationController *navigationController
dans MyViewController. À partir de l'Interface Builder, j'ai défini simplement mon point de vue dans la vue de la racine de contrôleur et de définir le Propriétaire du Fichier->vue pour que la définition de la vue.Et de même pour le code, je n'ai la suite dans ma fenêtre parente:
(Je fais appel presentModelViewController sur l'autonomie, je ne sais pas pourquoi vous avez eu
self.navigationController
.) Quand je l'ai testé, mais le résultat était que mon point de vue a été chargé à partir du fichier NIB, mais la barre de navigation manquait. Une ligne de code dans MyViewController fixe, ce:Tout ce que je fais ici, est de mettre MyViewController de vue à point de myNavigationController.vue, qui contient tout ce qui a été défini dans le fichier NIB, y compris la manette de navigation.
Regarder le modèle dans XCode pour une "Navigation-based Application". (Nouveau Projet -> Navigation-en fonction de l'Application), Puis ouvrir le MainWindow.xib dans Interface Builder. Si elle n'est pas vue, il pense que le viewcontroller que vous avez créé à l'étape 1. Ensuite, regardez le "Root-Vue-Contrôleur" est référencé dans l'inspecteur et de voir comment il est relié à la "Racine-Vue-Contrôleur" la plume dans les Attributs de l'inspecteur et de la "RootViewController" de la Classe dans l'Identité de l'inspecteur.
Vous voulez mettre le contenu que vous souhaitez afficher à la racine de votre navigation dans votre version de "RootViewController". Généralement, le contrôleur qui est affiché à côté est un "DetailViewController". Encore une fois, de lire à travers l'exemple de code que le modèle fournit et vous verrez comment commencer à le faire. Regardez le code commenté dans
didSelectRowAtIndexPath
dans l'exemple du modèle de la RootViewController.m. Vous aurez besoin pour créer votre propre point de vue contrôleur pour servir DetailViewController.J'espère que cela va clarifier les choses pour vous.
/Ou de les modifier en fonction de votre Commentaire//
La Pomme docs disent que si vous voulez utiliser de l'IB afin de rendre votre Navigation contrôleurs, vous devriez vraiment mettre dans votre MainWindow.xib. J'ai été bricoler avec le fait que vous ne pouvez pas avoir la NavigationController comme une sous-vue de votre UIView objet. Ce que vous pouvez faire compte tenu de l'endroit où vous avez commencé de l'est de l'utilisation de l'IB pour ajouter une barre de Navigation de l'objet de votre vue-contrôleur, puis de contrôler les choses à partir de là.
À partir de la documentation d'Apple "Bien que vous pouvez également charger autonome ou modal présenté manettes de navigation de votre principal plume de fichier (ou tout autre fichier nib), cela n'est pas optimale. Dans ces scénarios, il est généralement plus facile de créer la manette de navigation par programme au moment de l'utilisation."
//PLUS DE MODIFICATIONS//
Dans XCode4 le modèle de projet est maintenant appelé un "Détail" du projet. C'est parce qu'il sera mis en place comme une vue fractionnée de contrôleur dans l'iPad, mais toujours régulière d'un projet de navigation de l'iPhone. Où j'référence "RootViewController" dans la réponse, vous la trouverez maintenant à quelque chose appelé "MasterViewController"
Le code suivant est ne vous donnera pas d'objet valide.
La raison en est que navigationController propriété de UIViewController ne renvoie une manette de navigation si le point de vue du contrôleur est dans sa pile. Cette propriété est nul si une manette de navigation ne peut pas être trouvé. Votre vue-contrôleur n'est pas dans la pile de la manette de navigation. De toute façon je ne suis même pas sûr si vous avez correctement initialiser notre manette de navigation. Lire un peu de documentation.