1

Voici mon problème:barre d'onglets dans une navigation aplication base (Encore une fois)

J'ai lu beaucoup de choses sur la façon d'utiliser une barre d'onglets dans une application de navigation, mais je ne peux toujours pas comprendre . J'ai essayé à la fois d'utiliser et d'éviter d'utiliser un contrôleur de barre d'onglets, mais je ne trouve tout simplement pas la solution.

J'ai déjà une application basée sur la navigation qui fonctionne. J'ai plusieurs fichiers nib (views), chacun avec son propre contrôleur de vue, que je pousse par programmation sur la pile du contrôleur de navigation. J'ai besoin d'une de ces vues pour avoir une barre d'onglets qui me permette de passer d'une partie à l'autre. Je comprends le fonctionnement de la barre d'onglets, et je pense que ce dont j'ai besoin est d'utiliser un contrôleur de barre d'onglets, car cela me permettrait de définir les contrôleurs de vue associés à chaque élément de la barre d'onglets. Cependant, je ne peux pas voir comment le faire. Si je déclare un contrôleur de barre d'onglets dans mon "tabBarViewController", dessinez le contrôleur de la barre d'onglets dans mon "tabBarView" et reliez-les au IB, cela me donnera une erreur (je pense que c'est parce que je n'ai pas Est-ce que j'ai besoin de quelque chose d'équivalent à "[window addSubView: [vue tabbarcontroller]]?) Dans ce cas, tout ce que je dois savoir est de" voir "le contrôleur de la vue de dessus Si j'ai essayé de ne pas utiliser un contrôleur de barre d'onglets, comme je l'ai lu est la meilleure solution à ce problème, ¿Comment puis-je gérer les éléments de la barre d'onglets, les commutateurs entre eux , etc

J'apprécierais vraiment votre aide.

Répondre

0

Vous ne pouvez pas pousser un contrôleur de barre d'onglets sur une pile de contrôleur de navigation. Il n'y a pas de supporté façon de le faire. Au lieu de cela, vous pouvez créer votre propre instance de UITabBar, puis utiliser un délégué conforme à UITabBarDelegate. De cette façon, votre délégué recevra le message tabBar:didSelectItem: chaque fois qu'un élément de barre d'onglets est sélectionné par l'utilisateur. Cependant, vous devrez gérer le NSArray de items pour la barre sans utiliser IB. Une fois que vous avez compris cela, tout ce qui reste à faire est de pousser un UIViewController normal sur votre pile de navigation comme les autres, et de laisser ce contrôleur gérer votre barre d'onglets et déléguer.

+0

Vous avez tort - vous pouvez pousser une barre d'onglets sur une pile de navigation. Je viens d'écrire un projet de test qui fait exactement cela et ça fonctionne bien. – jsd

+0

C'est incorrect. Un UITabBarController est une sous-classe d'un UIViewController, et '- [UINavigationController pushViewController: animated:]' n'a besoin que d'un objet UIViewController à pousser. Vous pouvez donc pousser un UINavigationController sur un UINavigationController si vous le souhaitez. –

+0

@jsd - le Guide de programmation de View Controller pour iPhone OS demande à être différent (en particulier, dans la section Combinaison de la barre d'onglets et des contrôleurs de navigation). http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/CombiningToolbarandNavigationControllers/CombiningToolbarandNavigationControllers.html – Tim

-1

Vous pouvez le faire avec un peu de code, comme ceci:

FooViewController *foo = [[FooViewController alloc] init]; 
BarViewController *bar = [[BarViewController alloc] init]; 

UITabBarController *tabby = [[UITabBarController alloc] init]; 
[tabby setViewControllers:[NSArray arrayWithObjects:foo, bar, nil] animated:NO]; 
[self.navigationController pushViewController:tabby animated:YES]; 
[foo release]; 
[bar release]; 
[tabby release]; 

Vous pourriez probablement faire avec IB ainsi, il suffit de charger le contrôleur de barre d'onglet à partir d'une pointe.

J'ai construit un projet qui illustre cela en action, vous pouvez le télécharger à partir http://s3.thismoment.com/navtab.zip

0

Je viens de faire une application avec un contrôleur tabBar et 5 navControllers. Tout ce que vous devez faire est de charger les plumes et le contrôleur de navigation dans le premier élément du contrôleur tabBar. Vous pouvez masquer le tabBar même si les vues sont à l'intérieur, et le faire apparaître dans la vue dont vous avez besoin.