由tabbar触摸引起的导航嵌套推送

时间:2014-09-27 08:58:30

标签: ios tabbarcontroller

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:      (UIViewController *)viewController{
    if (viewController == _personalNavViewCtrl) {
    AppDelegate *delegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
    if (delegate.uid == nil) {//账户没有登陆过
         if (_loginViewCtrl == nil) {
            _loginViewCtrl = [[LoginViewCtrl alloc] init];
        }
        NSLog(@"_personalNavViewCtrl.ViewCtrl:%@",_personalNavViewCtrl.viewControllers);
        if (_personalNavViewCtrl.topViewController != _loginViewCtrl) {
            [_personalNavViewCtrl pushViewController:_loginViewCtrl animated:NO];
        }   
    }
 }
}

以上是关键代码。代码中包含UITabBarController,其中UINavigationController,其项目为4.当我触摸item4时,我想推送另一个UIViewController通过一些juge。因此当当前项目为3时,当我触摸item4时,它就可以了。但是当当前项目为4时,我再次触摸item4,我发现了这个问题。我发现UINavigationController viewControllers只是rootViewController,我推的那个被解雇了。另一个:日志告诉我:1,嵌套推送动画可能导致导航栏2损坏,完成导航转变为意外状态。 NavigationBar子视图树可能已损坏。

我不知道为什么。

1 个答案:

答案 0 :(得分:0)

方法1:

使用

- (void)presentViewController:(UIViewController *)viewControllerToPresent
                     animated:(BOOL)flag
                   completion:(void (^)(void))completion

展示您的_loginViewCtrl

方法2:

测试是否登录

- (BOOL)tabBarController:(UITabBarController *)tabBarController
shouldSelectViewController:(UIViewController *)viewController