Pouvez-vous pousser un UITabBarController à l'intérieur d'un UINavigationController

Est-il impossible de pousser un UITabBarController à l'intérieur d'un UINavigationController? Je lis dans les anciennes versions d'iOS, mais est-ce toujours le cas maintenant?

Il suffit de le mettre, OUI vous pouvez.

Mais simplement parce que vous pouvez, ne signifie pas que vous devriez. UITabBarController est destiné à être utilisé en tant que viewController au niveau racine (en tant que rootViewController de la window de l'application). L'objective est de fournir à l'user le meilleur (et facile) UX. Apple conseille de conserver la hiérarchie de vue de votre application de sorte qu'il n'y ait qu'un seul "path" d'un controller de vue à un autre.

La manière généralement acceptée d'utiliser un UITabBarController est de le définir comme rootViewController et d'assigner UIViewControllers à chaque 'onglet'. Si vous voulez pouvoir faire un push / pop depuis ces controllers de vue, vous affectez un UINavigationController à chaque onglet, avec leurs propres rootViewController place, tout comme l'application Facebook pour iOS.

Si vous décidez de le pousser sur un UINavigationController il est conseillé d'utiliser des viewControllers simples dans chaque onglet, plutôt que UINavigationController s, pour éviter plusieurs hiérarchies de vue. Le rest vous concerne en tant que développeur. En aucun cas, la facilité de encoding ne devrait affecter l'expérience de l'user final. La priorité est toujours la dernière.

MODIFIER:

  1. Créez un UITabBarController .

  2. Vous définissez les controllers de vue racine pour chaque onglet en utilisant:

     tabBarController.viewControllers = [NSArray arrayWithObjects: alphaController, betaController, nil]; 
  3. Poussez sur votre controller de navigation.

  4. Dans la méthode viewDidLoad de votre class UITabBarController (conseillée à la sous-class), vous définissez ses éléments UIBarButtonItems ( UIBarButtonItems ).

En utilisant UITabBarControllerDelegate , vous pouvez gérer leur sélection. Vous n'avez pas forcément besoin d'afficher viewControllers lors de la sélection des tabs. Vous pouvez modifier leur comportement en shouldSelectViewController: méthode shouldSelectViewController:

Apple dit NON, mais ici guide sur le russe avec le code p.2 http://arm1.ru/blog/ispolzovanie-uinavigationcontroller-vmeste-s-uitabbarcontroller

Je travaillais récemment sur une application dans laquelle UITabbarController était poussé dans un UINavigationController. Cette application est actuellement sur Apple Store.

Je ne sais pas pourquoi Apple ne recommand pas cela et pourquoi les gens font face à des problèmes avec cela.

@Slashik réponse est un exemple, j'ai utilisé de la même manière.

Vous pouvez, mais puisque les docs disent que vous ne devriez pas faire cela, cela peut et va causer des problèmes. J'ai découvert ceci quand j'ai placé un controller de barre d'tabs dans la stack de navigation (avant que j'ai noté l'information dans les docs) et puis j'ai noté que la barre de navigation se comporte bizarrement en l'allumant tout en commutant entre les tabs. Je voulais que certains controllers de vue à l'intérieur du controller de barre d'tabs aient une barre de navigation visible et d'autres non, mais cela ne fonctionne pas comme prévu (c'est comme s'il y avait un timeout et la barre de navigation cache un onglet plus tard que prévu). Donc, je reorderais contre.