【问题标题】:poptorootviewcontroller when clicking a button单击按钮时的poptorootviewcontroller
【发布时间】:2013-10-21 11:13:44
【问题描述】:

现在让我解释清楚,

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

我在 viewcontroller 中添加了一个 tabbarcontroller 作为子视图。在 tabbarcontroller 中,我添加了两个导航控制器,如下图所示,

我添加了三个(分别命名为 First、Second、Third)的视图控制器作为新文件。

如果我使用以下代码在第一个选项卡中从一个视图控制器导航到另一个视图控制器,

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
}

切换到下一个标签后,我应该弹出rootviewcontroller,我尝试了下面的代码

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

但它跳转到下一个选项卡但 popToViewController 不起作用,有什么建议吗?

【问题讨论】:

    标签: iphone ios objective-c uinavigationcontroller uitabbarcontroller


    【解决方案1】:

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

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

    【讨论】:

    • 对不起,它不起作用,如果我单击按钮它会跳转到下一个选项卡,但 popToViewController 无法正常工作。
    • popToRootViewController 应该可以工作,您不需要弹出到第 0 个 viewController。问题出在其他地方。
    • 这是一个 UITabBarControllerDelegate 方法。如果您不将此代码的类设置为 tabBarController 的委托,这将不起作用。
    • @All in All Azahguraja,我不会点击tab,我会点击tabbarcontroller的viewcontroller里面的一个按钮,上面的代码只有点击tab才会起作用
    • 改进了我的答案,尝试在 switchTab 方法中调用相同的代码。
    【解决方案2】:

    我不了解这里的整个结构,但我意识到您正在使用不同的控制器来推送 vc“第三个”并弹出到根目录。你可以试试:

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

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

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

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

    【讨论】:

    • 我在 tabbarcontroller 中有两个选项卡,我在第一个选项卡中从一个 viewvonroller 推送到另一个 viewcontroller。
    • 然后我通过单击 tabbarcontroller 下方的选项卡按钮切换到第二个选项卡,我在第二个选项卡的视图控制器上有一个按钮,通过单击该按钮我应该切换到第一个选项卡以及 popto第一个选项卡的第一个视图控制器。
    • 希望你能理解,如果不明白请追问,我找了好久。
    • All in All Azahguraja 的回答似乎是准确的。你能设置一个断点并说代码是否在 tabBarController:didSelectViewController 消息中停止吗?
    • 我将断点设置为 All in All Azahguraja 建议的方法,但是当我单击选项卡时会调用它,如果单击视图控制器内的 UIButton 则不会调用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多