我有UITabBarController,它是UINavigationController的标签点之一。 UINavigationController rootViewController是类BGProfileView,它显示用户的配置文件
在viewDidAppear,我安排如果用户没有登录,则会推送一个BGLogin视图控制器。
[BGLogin alreadyLoggedin:self.navigationController hideBackButton:YES anddoBlock:^{
[self whatToDoAfterLogin];
}];
现在一切都很好,但有一个小问题。如果我再次按下标签,BGLogin将从UINavigationController中解脱出来。
我不知道是什么让BGLogin出局了。
如果我选择其他选项卡,然后单击返回BGProfile选项卡,则不会发生这种情况。它只是在我单击相同的活动选项卡时发生。所以我在BGProfile选项卡中,然后再次单击该选项卡。基本上它发生在我选择应该什么也不做的活动选项卡时。事实上,它对其他人没有任何作用。
我在viewWillDisappear中放了一个断点,这就是我所看到的:
如您所见,view循环调用viewDidAppear。但是为什么主循环调用viewDidAppear?通常有一个代码说像nav popViewController
答案 0 :(得分:3)
有机会。您的标签栏控制器正在使用根视图控制器推送新的导航控制器。并且你解释它正在弹出。选择相同的选项卡时,您需要告诉tabBarController不要显式执行任何操作。
示例
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
UIViewController *tbSelectedController = self.tabBarController.selectedViewController;
if ([tbSelectedController isEqual:viewController]) {
return NO;
}
return YES;
}