以编程方式切换选项卡无法正常工作

时间:2012-01-12 22:06:53

标签: ios cocoa-touch

我正在尝试使用以下方式以编程方式切换标签:

[tabBarController setSelectedIndex:index]

我也试过了:

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

它第一次工作 - 切换选项卡和与选项卡关联的视图。然而,它第二次及其后不起作用。然后它不正确地切换选项卡(并非总是),并且不切换与选项卡关联的视图控制器。

有什么想法吗?

这就是我想要完成的事情:

标签A:我有一个标签,用于启动相机拍照并添加一些细节。

选项卡B:我有一个标签,其中包含拍摄的照片列表和一个条形按钮,可通过拍照和添加细节来添加新项目。

我正在尝试这样做,以便当用户点击标签A时,它会切换到标签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 个答案:

答案 0 :(得分:2)

UIViewController类有一个tabbarController属性,因此您可以通过调用视图控制器的父控制器(选项卡栏控制器)来简化操作,而不是使用应用程序委托来访问选项卡栏控制器。调用setSelectedIndex也应该没问题。所以从你的视图控制器里面:

[self.tabbarController setSelectedIndex:3];

为了帮助调试,您可以在相关位置放置一些NSLog:

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

答案 1 :(得分:2)

事实证明问题是我正在从viewWillAppear而不是viewDidAppear更改tabBarController索引。必须与加载事物的顺序有关。