应用程序进入后台时的popToRootViewController

Posted

技术标签:

【中文标题】应用程序进入后台时的popToRootViewController【英文标题】:popToRootViewController when application enters background 【发布时间】:2012-07-28 14:03:00 【问题描述】:

在我的应用程序的didFinishLaunchingWithOptions,代码是

   _homeViewController = [[HomeViewController alloc]init];
    UINavigationController*  _navigationController = [[UINavigationController alloc] initWithRootViewController:_homeViewController];
    [self.window setRootViewController:_navigationController];
    [_navigationController setNavigationBarHidden:YES];
    [self.window makeKeyAndVisible];

HomeViewController 中,我有两个按钮,如果按下按钮,我将展示 ViewController。如果 button1 被按下,代码是

if (_detailsViewController == nil)
            _detailsViewController = [[DetailsViewController alloc]init];

       [self.navigationController presentModalViewController:_detailsViewController animated:YES];

现在,当我在 detailsViewController 中并按下 iPhone 主页按钮时,在同一个类中,我正在使用 UIApplicationDidEnterBackgroundNotification 并调用一个方法来执行以下行

[self.navigationController popToRootViewControllerAnimated:YES];

所以我想当我再次打开应用程序时,我可以看到 HomeViewController,但它不起作用。请帮帮我!!

【问题讨论】:

我认为您需要关闭第一个呈现的视图控制器,然后 popToRootViewControllerAnimated 才能工作。 是的。关闭视图控制器可能会起作用。但是,如果我在第 5 个视图控制器中并且我试图来到 HomeViewController 如果您已经从导航控制器呈现,那么您需要先关闭,然后才能弹出回家。如果您展示的 VC 不止一个,那么您可以在数组中跟踪它们,同时从该数组中删除。我面临着同样的情况,我一直以这种方式工作。不确定是否有更好的方法来解决这个问题。 【参考方案1】:

当你进入后台时,保存一段状态信息,当你重新进入前台时,检查该信息,如果设置了标志,则在没有动画的情况下在那里弹出。

【讨论】:

但是 popToRootViewController 现在似乎不起作用。因为,我在 DetailsViewController 中又添加了一个按钮,例如后退按钮。单击后退按钮时,我添加了这一行 [self.navigationController popToRootViewControllerAnimated:YES]; ,但它不会进入根视图。为什么 ?我错过了什么吗:( 在我看来,当您移至后台时您正在执行此操作,并且视图控制器不会有很多时间来响应。我不完全知道为什么它不起作用 - 我必须编写自己的应用程序并使用它。我只是说如果您反转问题 - 当您回来时处理 GUI 更改。当您显示模态视图控制器时,它可能会保持该消息处于未决状态,并且您没有将其关闭。如果您将其关闭,然后弹出,这可能会起作用,但是当您离开时,gui仍然会四处移动-在我看来,回来时处理起来会更好。【参考方案2】:

似乎我无法弹出到根视图的原因是,我在两者之间展示了 ViewController,如果 ViewController 与导航控制器一起出现,即,如果 ViewController 作为导航控制器被推送,那么我可以弹出到根视图控制器

【讨论】:

以上是关于应用程序进入后台时的popToRootViewController的主要内容,如果未能解决你的问题,请参考以下文章

进入后台时的Android缩略图

应用程序在后台时的地理围栏设备

URLSession downloadTask 在后台运行时的行为?

iOS:应用程序从后台返回后访问 EAOutputStream 时的 SIGPIPE

应用程序在后台或暂停时的位置更新

怎么取消登录百度云时的手机验证码?