应用程序进入后台时的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的主要内容,如果未能解决你的问题,请参考以下文章
URLSession downloadTask 在后台运行时的行为?