我处理遗留应用程序,并且发现我的view[Will/Did]Disappear
方法并不总是被正确解雇。
案例是,我在AppDelegate中将(自定义)UIViewController
设置为rootViewController。这个rootViewController有一个UINavigationController
,它上面有两个视图控制器。当用户按下主页按钮时,用户退出。当他稍后返回应用程序时,应用程序会调用[UINavigationController popToRootViewControllerAnimated:YES]
,然后显示用于登录的模式UIViewController
。
问题是:当我正常推送/弹出UINavigationController
时,我的viewWillDisappear
方法被正确调用。但是当我使用popToRootViewControllerAnimated:
方法时,在任何弹出的viewControllers上都没有调用viewWillDisappear
。
在互联网上搜索只有两个可能的原因:
view[Will/Did]Disappear
yourself 我的应用中没有这些建议。我不知道在哪里看。有人建议应用程序出错吗?
答案 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];
}
});
}