web-dev-qa-db-fra.com

Comment implémenter le contrôleur de barre d'onglets avec le contrôleur de navigation dans le bon sens

J'utilise Storyboard et Xcode 6. J'ai des contrôleurs et des scènes dans mon Storyboard:

UINavigationController qui a HomeViewController en tant que racine. HomeViewController a un bouton qui Show (e.g. Push)UITabBarController. UITabBarController a 4 UIViewControllers.

Mais mon problème est qu'après avoir montré UITabBarController, il n'y a pas de barres de navigation dans 4 UIViewControllers. Mais j'ai supposé que si je Show (e.g. Push)UITabBarController alors il devrait avoir un contrôleur de navigation intégré qui est le contrôleur initial dans le storyboard. Ai-je raison? Et si oui, comment puis-je configurer la barre de navigation dans Storyboard, car il y a maintenant un événement de barre par défaut dans la barre d'onglets que je vois dans le storyboard. J'ai sélectionné UIViewController et défini des métriques simulées dans l'inspecteur d'identité sur la barre de navigation translucide pour la propriété Top, mais je suppose qu'il devrait être automatiquement ajouté à ce contrôleur et à la barre d'onglets sans étapes supplémentaires.

Ou dois-je ajouter un nouveau contrôleur de navigation pour chaque élément de la barre d'onglets qui aura son contrôleur de vue racine?

La principale question pourquoi je ne vois pas la barre de navigation dans le storyboard en utilisant show (par exemple, Push). Par exemple, si j'ajoute un contrôleur de navigation puis que je le configure comme contrôleur de barre d'onglets racine, Xcode ajoute automatiquement la barre de navigation supérieure, mais si la file d'attente comporte une étape supplémentaire, comme dans mon cas HomeViewController, la barre de navigation supérieure n'apparaît jamais automatiquement.

46
Matrosov Alexander

Bonjour, vous devez intégrer chaque contrôleur de vue contenu dans la barre d’onglet à un contrôleur de navigation qui lui est propre. Donc, le flux est comme ça (HomeVC est incorporé dans un NavController):

                                         / --> `NavController` --> `ViewController1`
                                         | --> `NavController` --> `ViewController2`
`HomeViewController`-->`TabBarController`|--> `NavController` --> `ViewController3`
                                         \--> `NavController` --> `ViewController4`
  1. Allez dans éditeur -> Intégrer dans -> Contrôleur de barre d’onglet (ou contrôleur de navigation)

How to embed correctly

Pour répondre à vos questions:

Chaque onglet d'une interface de contrôleur de barre d'onglets est associé à un contrôleur de vue personnalisé (différent). Lorsque l'utilisateur sélectionne un onglet spécifique, le contrôleur de la barre d'onglets affiche la vue racine du contrôleur de vue correspondant, en remplacement de toutes les vues précédentes.

Le contrôleur de vue racine de l'onglet doit donc être associé à un contrôleur de navigation; un contrôleur de vue de navigation doit être ensuite inséré pour que le contrôleur de vue puisse hériter d'une navigation. Une barre d'onglets permet de basculer entre les vues.

Ce document aidera à décrire plus d'informations à ce sujet. https://developer.Apple.com/documentation/uikit/uitabbarcontroller

142
App Dev Guy

Dans Swift 2, Xcode 7 dispose d’une fonctionnalité très pratique pour l’ajout d’un contrôleur UINavigationController:

  1. Sélectionnez le UIViewController utilisé comme "onglet" pour le UITabBarNavigationController
  2. Dans le menu supérieur de Xcode, sélectionnez "Editor" ->
  3. "Intégrer dans" ->
  4. "Contrôleur de navigation"

    enter image description here

18
Brian Ogden

Si vous voulez quelque chose comme ça:

TabBarController -> Navigation Controller -> View Controller with a Table View -> and from the TableView a MasterDetailView Par exemple:

J'ai eu le problème qu'il n'y avait pas de navigation dans le MasterDetailView (pas de bouton Précédent pour le ViewController avec le TableView).

La solution est:

Définissez Segue entre TableView et MasterDetailView sur: Kind: Push (Deprecated)

Lancez votre application ... espérons que vous verrez le bouton Précédent ... changez le Kind en Show (e.g. Push), exécutez à nouveau -> cela devrait fonctionner.

1
Pixki