2012-01-12 66 views
1

我试图以编程方式使用切换标签:切换标签编程工作不正常

[tabBarController setSelectedIndex:index] 

我也试过:

tabBarController.selectedViewController = [tabBarController.viewControllers objectAtIndex:index]; 

它可以在第一时间 - 切换两个标签和与选项卡关联的视图。然而,第二次和以后都不起作用。然后它不规则地切换选项卡,并且不切换与选项卡关联的视图控制器。

任何想法?

这里就是我试图完成:

标签答:我有一个启动相机进行拍照,并添加一些细节的标签。

标签B:我有拍摄的照片列表和酒吧按钮通过拍照和添加细节,添加新项的选项卡。

我想,这样当用户点击选项卡切换到标签B和启动添加项方法做出来。什么是最好的方法来做到这一点?

谢谢。

下面是更详细的代码:

标签A被挂接到导航控制器与一个UIViewController。在该控制器我有以下几点:

- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
[appDelegate switchView]; 
} 

在AppDelegate.m我有以下几点:

- (void)switchView 
{ 
tabBarController = (UITabBarController *)self.window.rootViewController; 
tabBarController.selectedViewController 
= [tabBarController.viewControllers objectAtIndex:3]; 
} 
+2

这听起来像你有正确的做法,但你可能在你的代码中的错误。我们可以看到相关的代码吗? – 2012-01-12 22:09:10

+0

只是在问题中添加了一些代码。 – Lorenz 2012-01-12 23:12:31

回答

2

UIViewController类具有tabbarController属性,这样你就可以通过调用视图控制器的父事情简单化控制器(标签栏控制器),而不是使用应用程序委托来访问标签栏控制器。调用setSelectedIndex也可以。所以从您的视图控制器内:

[self.tabbarController setSelectedIndex:3]; 

要调试的帮助,你可以把一些NSLogs相关地方:

NSLog(@"The currently selected tab is: %@",self.tabbarController.selectedIndex); 
+0

小心使用索引 - 这不会只要你有超过5个标签的工作(** **更多 - 标签) – Till 2012-01-13 00:02:32

+0

我试过直接从文件调用它。在这两种情况下,选项卡都会更改,但实际视图不会。或者更确切地说,视图的变化与它应该的_first_时间完全相同,但之后不变。 – Lorenz 2012-01-13 00:38:25

+0

您是否尝试在各个位置注销selectedIndex以帮助进行调试? – MattyG 2012-01-13 00:50:56

2

原来的问题是,我是改变从viewWillAppear中的tabBarController指数而不是viewDidAppear。必须与事物加载的顺序有关。