我正在尝试使用以下方式以编程方式切换标签:
[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];
}
答案 0 :(得分:2)
UIViewController类有一个tabbarController属性,因此您可以通过调用视图控制器的父控制器(选项卡栏控制器)来简化操作,而不是使用应用程序委托来访问选项卡栏控制器。调用setSelectedIndex也应该没问题。所以从你的视图控制器里面:
[self.tabbarController setSelectedIndex:3];
为了帮助调试,您可以在相关位置放置一些NSLog:
NSLog(@"The currently selected tab is: %@",self.tabbarController.selectedIndex);
答案 1 :(得分:2)
事实证明问题是我正在从viewWillAppear而不是viewDidAppear更改tabBarController索引。必须与加载事物的顺序有关。