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

时间:2012-10-01 21:05:09

标签: iphone objective-c ios

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

我可以切换到另一个标签。

self.tabBarController.selectedIndex = 4;

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

我该怎么做?

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

我的视图控制器被加载到5个导航控制器中,这些控制器被添加到app delegate中的标签栏。

3 个答案:

答案 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];

     }

如果用户在任何带有上述代码和开关标签的视图中,他们离开的标签会弹出到根视图,所以当他们回来时一切都很酷....