为什么UINavigationController会一直弹出顶级控制器

时间:2013-06-14 09:57:15

标签: objective-c uinavigationcontroller uitabbarcontroller

我有UITabBarController,它是UINavigationController的标签点之一。 UINavigationController rootViewController是类BGProfileView,它显示用户的配置文件

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

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

现在一切都很好,但有一个小问题。如果我再次按下标签,BGLogin将从UINavigationController中解脱出来。

我不知道是什么让BGLogin出局了。

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

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

enter image description here

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

1 个答案:

答案 0 :(得分:3)

有机会。您的标签栏控制器正在使用根视图控制器推送新的导航控制器。并且你解释它正在弹出。选择相同的选项卡时,您需要告诉tabBarController不要显式执行任何操作。

示例

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    UIViewController *tbSelectedController = self.tabBarController.selectedViewController;

    if ([tbSelectedController isEqual:viewController]) {
        return NO;
    }

    return YES;
}