2010-09-03 42 views
1

我刚刚开始使用iPhone SDK进行开发,并且使用UITabBar切换到另一个选项卡时出现问题。使用UITabBar切换到另一个视图

这是我当前的代码,它到目前为止的工作:

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

但是,如果我去了更多的选项卡,重新安排使用TabBar项目时,viewControllers的指数变化太大。我有什么可能解决这个问题吗?

回答

0

首先,如果你发现自己打字:

(myAppAppDelegate *)[[UIApplication sharedApplication] delegate] 

你或许可以从一个更好的设计中获益。此代码可能来自视图控制器,在这种情况下,您将从视图控制器调用App应用程序委托,并处理您不应该了解的内容(选项卡栏)。

更好的设计是委托给应用程序委托,应用程序委托为您切换选项卡。应用程序委托应该在标签栏的实际视图控制器引用(你可以,如果不是通过IB挂钩这些了),所以你可以调用setSelectedViewController:与正确的对象,而不是索引到标签栏的数组:

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

现在,如果你不想代表团打扰你可以把在应用程序委托的方法(像上面的)和你原来的代码就变成了:

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

同样,你将需要添加IBOutlet中的属性到你的应用程序委托,你在Interface Builder中连接到fooBarController等。这会让你直接引用它们,而不是从数组中抓取它们。

0

最直接的意思我能想到依赖于事实,你第一次启动应用程序时,除非你正在做的事情,以节省重新排序,你可以节省掉UIViewControllers的初始列表:

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

其中'initialOrdering'是一个NSArray *,然后在您发布的代码中使用它代替appDel.tabBar.viewControllers。

相关问题