【问题标题】:Why UINavigationController keep popping out the top controller为什么 UINavigationController 不断弹出顶部控制器
【发布时间】:2013-06-14 09:57:14
【问题描述】:

我有 UITabBarController,其中一个选项卡指向 UINavigationController。 UINavigationController rootViewController 属于显示用户个人资料的 BGProfileView 类

在 viewDidAppear 中,我安排如果用户没有登录,它将推送一个 BGLogin 视图控制器。

[BGLogin alreadyLoggedin:self.navigationController hideBackButton:YES anddoBlock:^{
    [self whatToDoAfterLogin];
}];

现在一切都很好,但有一个小问题。再按一下tab,UINavigationController会弹出BGLogin。

我不知道是什么导致 BGLogin 弹出。

如果我选择不同的选项卡,然后单击返回 BGP 文件选项卡,则不会发生这种情况。当我单击同一个活动选项卡时,就会发生这种情况。所以我在 BGPProfile 选项卡中,我再次单击该选项卡。基本上,当我选择应该什么都不做的活动选项卡时会发生这种情况。事实上,它对其他人没有任何作用。

我在 viewWillDisappear 中放了一个断点,这就是我看到的:

如您所见,viewDidAppear 由主循环调用。但是为什么mainloop调用viewDidAppear?通常有一个代码说类似 nav popViewController

【问题讨论】:

    标签: objective-c uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    机会是存在的。您的标签栏控制器正在使用根视图控制器推送新的导航控制器。你解释它正在弹出。选择相同的选项卡时,您需要告诉您的TabbarController以明确执行任何操作。

    例子

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
    {
        UIViewController *tbSelectedController = self.tabBarController.selectedViewController;
    
        if ([tbSelectedController isEqual:viewController]) {
            return NO;
        }
    
        return YES;
    }
    

    【讨论】:

    • 哦,所以每次我重新选择一个标签时,都会创建一个全新的导航控制器?很奇怪。让我检查一下
    • 只需在您的 tabbarController 委托上实现上述代码...如果停止行为停止,则肯定是这种情况
    • 我很困惑。为什么标签栏控制器会推送一个新的导航控制器?你的意思是每次我们切换标签时,我都会处理不同的导航控制器和 rootViewController?
    • 是的,它解决了这个问题。谢谢。我仍然很困惑。所以请看上面。
    • 不,如果您在同一个选项卡上并再次选择相同的选项卡,则仅在这种情况下...
    猜你喜欢
    • 2012-12-23
    • 2011-02-27
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多