以编程方式切换到TabBar选项卡视图?

比方说,我在我的iPhone应用程序的一个标签视图中有一个UIButton,我想让它在TabBarController的标签栏中打开不同的选项卡。 我将如何编写代码来做到这一点?

我假设我卸载现有的视图,并加载一个特定的标签视图,但我不知道如何编写的代码。

谢谢。

尝试这个:

self.tabBarController.selectedIndex = 1; 

要么

 [self.tabBarController setSelectedIndex:1]; 

请注意,选项卡从0开始索引。因此,下面的代码片段起作用

 tabBarController = [[UITabBarController alloc] init]; . . . tabBarController.selectedViewController = [tabBarController.viewControllers objectAtIndex:4]; 

去酒吧的第五个标签。

你可以简单地将UITabBarController中的selectedIndex属性设置为适当的索引,并且视图将被改变,就像用户点击标签button一样。

我的意见是, selectedIndex或使用objectAtIndex不一定是切换选项卡的最佳方式。 如果您重新排列选项卡,硬编码索引select可能会混淆以前的应用程序行为。

如果您有要切换到视图控制器的对象引用,您可以执行:

 tabBarController.selectedViewController = myViewController 

当然,你必须确保myViewController确实在myViewController列表中。

我尝试了迪斯科S2的build议,这很接近,但这是最终为我工作的。 这是在完成另一个选项卡中的操作后调用的。

 for (UINavigationController *controller in self.tabBarController.viewControllers) { if ([controller isKindOfClass:[MyViewController class]]) { [self.tabBarController setSelectedViewController:controller]; break; } } 

对于您可能要移动标签的情况,这里是一些代码。

 for ( UINavigationController *controller in self.tabBarController.viewControllers ) { if ( [[controller.childViewControllers objectAtIndex:0] isKindOfClass:[MyViewController class]]) { [self.tabBarController setSelectedViewController:controller]; break; } } 

我想能够指定哪个选项卡是由类而不是索引显示的,因为我认为这是一个强大的解决scheme,不太依赖于如何连接IB。 我没有findDisco或Joped的解决scheme,所以我创build了这个方法:

 -(void)setTab:(Class)class{ int i = 0; for (UINavigationController *controller in self.tabBarContontroller.viewControllers){ if ([controller isKindOfClass:class]){ break; } i++; } self.tabBarContontroller.selectedIndex = i; } 

你这样称呼它:

 [self setTab:[YourClass class]]; 

希望这对某人有帮助

AppDelegate.m文件中使用:

 (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { NSLog(@"Selected index: %d", tabBarController.selectedIndex); if (viewController == tabBarController.moreNavigationController) { tabBarController.moreNavigationController.delegate = self; } NSUInteger selectedIndex = tabBarController.selectedIndex; switch (selectedIndex) { case 0: NSLog(@"click me %u",self.tabBarController.selectedIndex); break; case 1: NSLog(@"click me again!! %u",self.tabBarController.selectedIndex); break; default: break; } }