如何以编程方式切换到另一个标签并转到导航堆栈中的第一个视图?
我可以切换到另一个标签。
self.tabBarController.selectedIndex = 4;
但是,我还需要在该选项卡的导航堆栈中切换不同的视图控制器。
我该怎么做?
只要我运行上面的代码,它就会切换,但会切换到导航堆栈中当前加载的视图控制器。
我的视图控制器被加载到5个导航控制器中,这些控制器被添加到app delegate中的标签栏。
答案 0 :(得分:4)
我假设您UINavigationController
中有UITabBarController
个。如果是这种情况,您可以使用popToRootViewControllerAnimated:
转到第一个视图控制器。
int index = 4;
self.tabBarController.selectedIndex = index;
[self.tabBarController.viewControllers[index] popToRootViewControllerAnimated:NO];
答案 1 :(得分:0)
假设标签栏控制器的rootViewController是一个导航控制器,获取对它的引用然后弹出到你想要的视图控制器。您甚至可以在切换选项卡之前执行此操作。
编辑:我一直忘记我将UINavigationController子类化,以防止标签栏控制器的默认行为,告诉导航控制器在切换选项卡时弹出到其rootViewController(这是当一个人点击选项卡时的行为,不确定如果以编程方式完成它。)这是我使用的代码:- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
{
//NSLog(@"popToRootViewControllerAnimated");
return @[];
}
答案 2 :(得分:0)
知道这是旧的,但我遇到了类似的问题。我在tabViewController中有3个选项卡,每个选项卡都有一个可以钻取的导航树。当用户切换选项卡时,我需要显示该选项卡的rootviewcontroller。我的解决方案是将以下行添加到导航树中的那些视图控制器:
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:YES];
DLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd));
[self.tabBarController.viewControllers[self.tabBarController.selectedIndex] popToRootViewControllerAnimated:YES];
}
如果用户在任何带有上述代码和开关标签的视图中,他们离开的标签会弹出到根视图,所以当他们回来时一切都很酷....