首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用viewWillDisappear时未调用popToRootViewControllerAnimated

调用viewWillDisappear时未调用popToRootViewControllerAnimated
EN

Stack Overflow用户
提问于 2013-07-30 18:14:38
回答 2查看 18.3K关注 0票数 16

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

情况是,我将(自定义的) UIViewController设置为AppDelegate中的rootViewController。这个rootViewController有一个UINavigationController,它有两个视图控制器。当用户按home按钮时,用户将被注销。当他稍后返回应用程序时,应用程序调用[UINavigationController popToRootViewControllerAnimated:YES],然后显示一个用于登录的模态UIViewController

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

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

在我的应用程序中,这些建议都不是这样的。我也不知道该去哪找。有人对这个应用程序做错了什么有建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-30 18:19:03

景色可能不在屏幕上。必须在屏幕上(可见)才能调用viewWillDisappear:方法。如果它是从背景中回来的,它是看不见的。

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

票数 23
EN

Stack Overflow用户

发布于 2016-11-11 08:08:48

对我如此有用

代码语言:javascript
复制
[nav performSelector:@selector(popToRootViewControllerAnimated:) withObject:nil afterDelay:0.0];

我重写了UITabBarController

代码语言:javascript
复制
- (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];
        }
    });

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17954402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档