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

问题描述 投票:1回答:2

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

[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];
}
ios cocoa-touch
2个回答
2
投票

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

[self.tabbarController setSelectedIndex:3];

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

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

2
投票

事实是,我是从viewWillAppear而不是viewDidAppear更改了tabBarController索引。必须与事物的加载顺序有关。

© www.soinside.com 2019 - 2024. All rights reserved.