16

我在一个遗留应用程序上工作,并且发现我的view[Will/Did]Disappear方法并不总是被正确触发。

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

问题是:当我UINavigationController正常推送/弹出时,我的viewWillDisappear方法被正确调用。但是当我使用该popToRootViewControllerAnimated:方法时,viewWillDisappear不会在任何弹出的视图控制器上调用。

在互联网上搜索仅给出了两个可能的原因:

这些建议都不是我的应用程序的情况。我不知道去哪里找。有人对应用程序中的错误有什么建议吗?

4

2 回答 2

23

该视图可能不在屏幕上。viewWillDisappear:要调用该方法,它必须在屏幕上(可见) 。如果它从背景中返回,它是不可见的。

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

于 2013-07-30T18:19:03.550 回答
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];
        }
    });

}

于 2016-11-11T08:08:48.340 回答