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