79 votes

Contrôleur de barre d’onglet à l’intérieur d’une manette de navigation ou le partage d’un mode de navigation racine

Je suis en train d'implémenter une INTERFACE structurée comme dans le Tweetie application, qui se comporte de la manière suivante: l'affichage de niveau supérieur contrôleur semble être une manette de navigation, dont la vue racine est un "Comptes" table view. Si vous cliquez sur n'importe quel compte, il passe au deuxième niveau, qui est une barre d'onglets au bas de l'écran. Chaque onglet élément affiche une liste différente et vous permet de descendre plus (le niveau ultérieure ne pas afficher la barre d'onglet).

Donc, il semble que la mise en œuvre de la hiérarchie est:

  • UINavigationController
    1. Comptes: UITableViewController
    2. UITabBarController
      1. Les Tweets: UITableViewController
        • Vue de détail d'un tweet/user/etc
      2. Réponses: UITableViewController
      3. ...

Cela semble fonctionner[^1], mais semble être non pris en charge selon la documentation du kit de développement pour l' -pushViewController:animated: (italiques ajoutés):

viewController: Le point de vue du contrôleur qui est poussé sur la pile. Il ne peut pas être une instance de la tab bar controller.

Je voudrais éviter d'Api privées et autres, mais je ne sais pas pourquoi cette utilisation est expressément interdite, même quand il semble bien fonctionner. Quelqu'un connait la raison?

J'ai pensé à mettre la barre d'onglet contrôleur le contrôleur principal, avec chacun des onglets séparés contenant les contrôleurs de la navigation. Le problème, c'est que chaque valeur liquidative contrôleur a besoin de partager une seule racine-vue-contrôleur (à savoir les "Comptes" de la table dans Tweetie) -- cela ne semble pas fonctionner: en poussant la table contrôleur à une deuxième valeur liquidative contrôleur semble pour le retirer de la première. Sans parler de toute la comptabilité lors de la sélection d'un autre compte serait probablement être une douleur.

Comment dois-je mettre en œuvre ce la bonne Manière?

[^1]: La barre d'onglet contrôleur doit être sous-classé, de sorte que la barre d'onglet contrôleur de navigation de l'élément à ce niveau reste synchronisé avec l'onglet sélectionné, l'élément de navigation, et de la personne de l'onglet tableau de contrôleur de la nécessité de pousser leurs respectifs des vues de détail d' self.tabBarController.navigationController au lieu de self.navigationController.

63voto

atebits Points 783

Les deux réponses précédentes ont eu raison - je ne pas utiliser UITabBarController dans Tweetie. Il est assez facile d'écrire une coutume XXTabBarController (plaine de la sous-classe d' UIViewController) qui est heureux de l'avoir poussé sur une nav de contrôleur de la pile, mais vit toujours par la "vue-contrôleur" de la philosophie. Chaque "onglet" sur le compte spécifique de la vue (Tweets/Replies/Messages) est son point de vue propre contrôleur, et dans la mesure où ils sont concernés, ils deviennent inversées sur l'écran par un simple-ol UITabBarController.

34voto

Robert Conn Points 742

Je construis une application qui utilise un cadre de navigation similaire à Tweetie. J'ai écrit un article sur la façon de procéder sur mon blog www.wiredbob.com, qui contient également des liens vers le code source. C'est un modèle complet que vous pouvez utiliser comme base pour un autre projet. Bonne chance!

10voto

Himadri Choudhury Points 5300

Il est possible d'ajouter un UITabBar à n'importe quel UIViewController. De cette façon, vous n'avez pas besoin de pousser un UITabBarController et de rester dans les règles de l'API Apple.

Dans le générateur d'interface, UITabBar se trouve sous "Windows, Vues et barres" dans la bibliothèque Cocoa Touch.

9voto

Alpinista Points 1799

Je le fais dans quelques-unes de mes applications. L'astuce pour ajouter une barre de tabulation à une application basée sur navigationController est de NE PAS utiliser TabBarController. Ajoutez une barre d'onglets à la vue, transformez le contrôleur de vue de cette vue en TabBarDelegate et répondez aux sélections de l'utilisateur sur la barre de tabulation du code du contrôleur de vue.

J'utilise des barres d'onglets pour ajouter des vues supplémentaires à la vue de la barre d'onglets en tant que sous-vues, pour recharger une vue sous forme de tableau avec différents jeux de données, pour recharger un UIPickerView, etc.

6voto

esilver Points 7768

Pendant la dernière heure, je me suis battu pour mettre en œuvre un UITabBar car il serait caché lorsque j'essaierais d'afficher ma vue; alors j'ai trouvé ce post :

En gros, assurez-vous d’insérer votre nouvelle vue sous la barre d’onglet, en respectant cette ligne de code:

 [self.view insertSubview:tab2ViewController.view belowSubview:myTabBar];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X