0

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

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

self.tabBarController.selectedIndex = 4;

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

我怎么做?

一旦我运行上面的代码,它就会切换到导航堆栈中当前加载的视图控制器。

我的视图控制器被加载到 5 个导航控制器中,这些导航控制器被添加到应用程序委托的选项卡栏中。

4

3 回答 3

4

我假设你UINavigationControllerUITabBarController. 如果是这种情况,您可以使用popToRootViewControllerAnimated:转到第一个视图控制器。

int index = 4;
self.tabBarController.selectedIndex = index;
[self.tabBarController.viewControllers[index] popToRootViewControllerAnimated:NO];
于 2012-10-01T21:09:15.497 回答
0

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

编辑:我一直忘记我将 UINavigationController 子类化以防止选项卡栏控制器的默认行为告诉导航控制器在切换选项卡时弹出到它的 rootViewController (这是一个人点击选项卡时的行为,不确定它是否发生当它以编程方式完成时。)这是我使用的代码:

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
{
    //NSLog(@"popToRootViewControllerAnimated");

    return @[];
}
于 2012-10-01T21:08:07.867 回答
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];

     }

如果用户在使用上述代码的任何视图中并切换选项卡,他们离开的选项卡会弹出到根视图,所以当他们回来时,一切都很酷......

于 2015-03-26T20:04:37.860 回答