我在一个遗留应用程序上工作,并发现我的view[Will/Did]Disappear方法并不总是被正确地触发。
情况是,我将(自定义的) UIViewController设置为AppDelegate中的rootViewController。这个rootViewController有一个UINavigationController,它有两个视图控制器。当用户按home按钮时,用户将被注销。当他稍后返回应用程序时,应用程序调用[UINavigationController popToRootViewControllerAnimated:YES],然后显示一个用于登录的模态UIViewController。
问题是:当我通常在UINavigationController上推送/弹出时,viewWillDisappear方法会被正确地调用。但是,当我使用popToRootViewControllerAnimated:方法时,不会在弹出的任何viewControllers上调用viewWillDisappear。
在互联网上搜索只能给出两个可能的原因:
在我的应用程序中,这些建议都不是这样的。我也不知道该去哪找。有人对这个应用程序做错了什么有建议吗?
发布于 2013-07-30 18:19:03
景色可能不在屏幕上。必须在屏幕上(可见)才能调用viewWillDisappear:方法。如果它是从背景中回来的,它是看不见的。
您可以尝试使用willMoveToParentViewController:,在从其父控件中删除视图控制器时调用它。
发布于 2016-11-11 08:08:48
对我如此有用
[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];
}
});}
https://stackoverflow.com/questions/17954402
复制相似问题