以编程方式切换到另一个选项卡并切换到第一个视图控制器?

如何以编程方式切换到另一个选项卡并转至导航堆栈中的第一个视图?

我可以切换到不同的选项卡。

self.tabBarController.selectedIndex = 4; 

不过,我还需要在该选项卡的导航堆栈中切换不同的视图控制器。

我怎么做?

只要我运行上面的代码,它切换,但导航堆栈中当前加载的视图控制器。

我的视图控制器加载到5个导航控制器添加到应用程序委托标签栏。

我假设你在你的UITabBarControllerUINavigationController 。 如果是这种情况,你可以使用popToRootViewControllerAnimated:去第一个视图控制器。

 int index = 4; self.tabBarController.selectedIndex = index; [self.tabBarController.viewControllers[index] popToRootViewControllerAnimated:NO]; 

假设标签栏控制器的rootViewController是一个导航控制器,获取它的引用,然后popup到你想要的视图控制器。 您甚至可以在切换标签之前执行此操作。

编辑:我一直忘记我subclassed UINavigationController,以防止标签栏控制器的默认行为告诉导航控制器popup到它的rootViewController当切换标签(这是当一个人在标签上点击,不知道如果它发生的行为当它完成编程。)这是我使用的代码:

 - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated { //NSLog(@"popToRootViewControllerAnimated"); return @[]; } 

知道这是一个古老的,但我面临着类似的问题。 我在tabViewController中有3个选项卡,每个选项卡都有一个可以钻取的导航树。 当用户切换选项卡时,我需要提供该选项卡的rootviewcontroller。 我的解决scheme是将以下行添加到导航树中的这些视图控制器:

  -(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:YES]; DLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd)); [self.tabBarController.viewControllers[self.tabBarController.selectedIndex] popToRootViewControllerAnimated:YES]; } 

如果用户在上面的代码和切换标签的任何视图,他们离开的标签popup到根视图,所以当他们回来一切都很酷….