2009-01-27 5 views
11

J'ai une application simple basée sur NavigationController. La fenêtre principale affiche un TableView et la sélection d'un élément charge une sous-vue. J'ai utilisé Interface Builder pour les vues de l'interface utilisateur.Comment ajouter un TabBar à l'application iPhone basée sur NavigationController

Maintenant je veux ajouter un TabBar à l'application. Où est-ce que je le mets? Ai-je besoin d'un TabBarController? Devrait-il aller dans le MainWindow.xib, ou RootViewController.xib?

Comment l'attacher avec mon contrôleur de navigation?

+0

Cela m'aiderait à voir un véritable projet xcode. Est-ce que quelqu'un a un lien vers un? – bentford

Répondre

2

Jetez un coup d'œil à l'exemple de code UICatalog. Il y a beaucoup de choses intéressantes, y compris la transition d'une vue à l'autre.

Dans votre cas, vous devez utiliser la méthode délégué UITableView

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

Dans cette méthode, vous allez créer et afficher votre contrôleur de vue de l'onglet. Cela peut être un contrôleur personnalisé avec un Nib associé, ou vous pouvez créer le tout dans le code en fonction de votre situation.

2

La réponse simple est d'en faire une application de barre d'onglets qui charge les contrôleurs de navigation.

La barre d'onglets sera votre composant de plus haut niveau, vous pourrez alors charger les contrôleurs de navigation pour chaque onglet. De là, il devrait être assez standard. J'ai dû apprendre celui-ci à la dure il y a un moment.

Vous pouvez commencer avec le modèle d'application de barre d'onglets de base dans XCode, il devrait configurer une barre d'onglets de base avec 2 vues simples.

+0

Oui, mais comment faire? –

2

Il est préférable d'incorporer une barre de navigation dans une application à onglets dans la mesure du possible. Le faire dans l'autre sens crée des complications, est difficile lorsqu'il est fait avec IB et conduit à beaucoup d'ennuis.

+0

Voulez-vous dire que je devrais créer un nouveau projet basé sur TabBarController et y intégrer mon code de contrôleur de navigation? Je préférerais garder mon projet existant, mais si cela va créer beaucoup de problèmes je suppose que je peux en commencer un nouveau. –

4

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

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

+0

Que faire si vous avez plus de 5 onglets et que vous voulez permettre à l'utilisateur de "modifier" les onglets principaux via le bouton plus ...? C'est quelque chose que vous obtenez gratuitement avec le contrôleur d'onglet –

+0

Je ne connais pas la réponse à cette question. Je n'ai jamais utilisé plus de 4 onglets dans un tabBar, et je n'ai jamais eu besoin de permettre aux utilisateurs de modifier la barre. Je sais juste que vous ne pouvez pas vraiment ajouter un TabBarController à une application basée sur NavigationBar – Alpinista

+0

pouvez-vous montrer l'exemple de code? – iPhoneDev

2

Vous pouvez utiliser Interface Builder pour modifier MainWindow .xib, et ajoutez un contrôleur de barre d'onglets à votre contrôleur de navigation. Vous pouvez également changer les contrôleurs de vue de UITabBarController en Vue/Navigation/Vue Table/Contrôleurs de sélection d'image avec la fenêtre Inspecteur d'IB. Ça va marcher.

Cependant, je ne suggère pas vraiment de placer le contrôleur de barre à onglets dans le contrôleur de navigation. La relation entre ces contrôleurs sera confuse si vous allez plus loin (le rendre plus complexe).

En supposant que vous avez le contrôleur Table View dans votre contrôleur de barre d'onglets et que vous souhaitez afficher la vue détaillée. Par conception, vous pouvez indiquer au contrôleur de navigation de pousser la vue dans la pile, mais cela rendra l'affichage détaillé au même niveau que votre contrôleur de barre d'onglets (sous Navigation Controller) et le contrôleur de vue de table maintient la relation comme parent. C'est assez étrange, au moins pour moi ...

+0

Pourriez-vous répliquer ou mettre à jour le contenu qui n'est plus disponible? – dlamblin

8

Le définitif réponse à cette question est présentée dans la documentation du SDK iPhone dans le Guide de programmation Controller pour iPhone Voir .

View Controller Programming Guide: Combining View Controllers

Ce lien va à la section droite et comprend une discussion sur les façons correctes pour créer la navigation et l'onglet interfaces barre.

Questions connexes