0

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

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

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

现在一切都很好,但有一个小问题。如果我再次按下选项卡,BGLogin 将从 UINavigationController 中弹出。

我不知道是什么让 BGLogin 弹出来。

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

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

在此处输入图像描述

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

4

1 回答 1

3

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

例子

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

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

    return YES;
}
于 2013-06-14T10:09:08.777 回答