单击按钮时poptorootviewcontroller

时间:2013-10-21 11:13:44

标签: iphone ios objective-c uinavigationcontroller uitabbarcontroller

让我现在解释清楚,

我在viewcontroller中有一个tabbarcontoller,它是单视图应用程序项目的主视图控制器。

我将一个tabbarcontroller添加到viewcontroller作为子视图。在tabbarcontroller中,我添加了两个导航控制器,如下面的图像,

enter image description here

我已将三个(名为First,Second,Third)的viewcontrollers添加为新文件。

如果我使用下面的代码在第一个标签中从一个视图控制器导航到另一个视图控制器,

third =  [[Third alloc] initWithNibName:@"Third" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:third animated:YES];

然后我点击tabbarcontroller下面的标签切换到第二个标签。

然后

如果我通过使用

单击第三个视图控制器中的按钮切换到下一个选项卡(第一个选项卡)
-(IBAction)switchtab
{
    vc.tabctrl.selectedIndex=0;
    //vc is the main viewcontroller to which the tabbarcontoller(tabctrl) added as subview
}

切换到下一个标签后,我应该poptorootviewcontroller,我尝试下面的代码

-(IBAction)switchtab
{
    vc.tabctrl.selectedIndex=0;
    [vc.tabctrl.navigationController  popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
}

但它会跳转到下一个标签但是popToViewController无法正常工作,有什么建议吗?

2 个答案:

答案 0 :(得分:3)

如果您的viewcontroller是导航控制器,那么当您切换选项卡时,以下代码将更改为根视图

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if ([self.tabBarController.selectedViewController isKindOfClass:[UINavigationController class]])
    {
        [(UINavigationController*)self.tabBarController.selectedViewController popToRootViewControllerAnimated:YES];


    }

}

答案 1 :(得分:1)

我不明白这里的整个结构,但我已经意识到你正在使用不同的控制器来推动vc“第三”并弹出到root。你能尝试一下:

[self.navigationController  popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];

在你用来推动“第三”的同一个班级?

编辑:另一种选择,你可以试试这个:

-(IBAction)switchtab
{
    vc.tabctrl.selectedIndex=0;
    [(UINavigationController*)vc.tabctrl.selectedViewController popToRootViewControllerAnimated:YES];

}