调用popToRootViewControllerAnimated时未调用viewWillDisappear

时间:2013-07-30 18:14:39

标签: ios objective-c uiviewcontroller

我处理遗留应用程序,并且发现我的view[Will/Did]Disappear方法并不总是被正确解雇。

案例是,我在AppDelegate中将(自定义)UIViewController设置为rootViewController。这个rootViewController有一个UINavigationController,它上面有两个视图控制器。当用户按下主页按钮时,用户退出。当他稍后返回应用程序时,应用程序会调用[UINavigationController popToRootViewControllerAnimated:YES],然后显示用于登录的模式UIViewController

问题是:当我正常推送/弹出UINavigationController时,我的viewWillDisappear方法被正确调用。但是当我使用popToRootViewControllerAnimated:方法时,在任何弹出的viewControllers上都没有调用viewWillDisappear

在互联网上搜索只有两个可能的原因:

我的应用中没有这些建议。我不知道在哪里看。有人建议应用程序出错吗?

2 个答案:

答案 0 :(得分:18)

视图可能不在屏幕上。它必须在屏幕上(可见)才能调用viewWillDisappear:方法。如果它从后台返回,则不可见。

您可以尝试使用从其父级删除视图控制器时调用的willMoveToParentViewController:

答案 1 :(得分:0)

对我有用

[nav performSelector:@selector(popToRootViewControllerAnimated:) withObject:nil afterDelay:0.0];

我重写了UITabBarController

- (void)setSelectedIndex:(NSUInteger)selectedIndex {

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        UINavigationController *navigationController = [originalViewController as:[UINavigationController class]];
        if (navigationController.presentedViewController) {
            [navigationController dismissViewControllerAnimated:NO completion:^{
                [navigationController popToRootViewControllerAnimated:NO];
            }];
        }else if (navigationController.topViewController){
            [navigationController popToRootViewControllerAnimated:NO];
        }
    });

}