以编程方式切换到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; } }