2010-09-03 12 views
1

Je viens de commencer à développer avec l'iPhone SDK et j'ai un problème avec le passage à un autre onglet avec le UITabBar.Passer à une autre vue avec UITabBar

Ceci est mon code actuel, et cela fonctionne jusqu'à présent:

myAppAppDelegate *appDel = (myAppAppDelegate *)[[UIApplication sharedApplication] delegate] 
[appDel.tabBar setSelectedViewController:[appDel.tabBar.viewControllers objectAtIndex:5]]; 

Mais si je vais à l'onglet supplémentaire et réorganiser les éléments TabBar, l'indice des viewControllers changent aussi. Y at-il une possibilité de comment je pourrais résoudre ce problème?

Répondre

0

Tout d'abord, si jamais vous vous trouvez en tapant ceci:

(myAppAppDelegate *)[[UIApplication sharedApplication] delegate] 

Vous pouvez probablement bénéficier d'une meilleure conception. Ce code provient probablement d'un contrôleur de vue, auquel cas vous appelez le délégué de l'App à partir d'un contrôleur de vue, et vous traitez des choses dont vous ne devriez pas avoir connaissance (la barre d'onglets).

Une meilleure conception consiste à déléguer au délégué de l'application, et le délégué de l'application bascule l'onglet pour vous. Le délégué de l'application devrait avoir des références aux contrôleurs de vue réelle dans la barre d'onglets (vous pouvez brancher ces via IB sinon) afin que vous puissiez appeler setSelectedViewController: avec l'objet correct, plutôt que l'indexation dans le tableau de la barre d'onglets:

/* Somewhere in the app delegate */ 
- (void)selectFooBarController { 
    [self.tabBar setSelectedViewController:self.fooBarController]; 
} 

maintenant, si vous ne voulez pas vous embêter avec la délégation, vous pouvez simplement mettre une méthode sur le délégué de l'application (comme celle ci-dessus) et votre code d'origine devient:

myAppAppDelegate *appDel = (myAppAppDelegate *)[[UIApplication sharedApplication] delegate] 
[appDel selectFooBarController]; 

Encore une fois, vous devrez ajouter des propriétés IBOutlet à votre délégué d'application que vous vous connectez à fooBarController etc. dans Interface Builder. Cela vous permettra de les référencer directement plutôt que de les extraire d'un tableau.

0

La plus franche signifie que je peux penser au large repose sur le fait que lorsque votre application démarre, sauf si vous faites quelque chose pour sauver la réordonnancement, vous pourriez économiser de la liste initiale des UIViewControllers:

initialOrdering = [[appDel.tabBar viewControllers] copy]; 

Où 'initialOrdering' est un NSArray * que vous utiliseriez au lieu de appDel.tabBar.viewControllers dans le code que vous avez publié.