【问题标题】:Nil out a presentedViewController when UIApplication becomes active again当 UIApplication 再次变为活动状态时,nil out apresentedViewController
【发布时间】:2014-07-13 09:51:18
【问题描述】:

当应用程序被关闭时,我在根视图控制器顶部有一个presentedViewController。 (例如,用户导航到另一个应用程序或返回主屏幕。)

我想在用户重新激活应用程序时将其取消,而他们不可见。调用 -dismissViewControllerAnimated: 不是一个选项,因为它仅在视图控制器可见时才有效,我想尽快这样做,特别是仅在 application:openURL:sourceApplication:annotation: 中,否则让用户在模态视图中继续他们的工作流程。

有什么技巧可以用吗?

【问题讨论】:

  • 当应用程序即将进入后台时,在没有动画的情况下调用dismiss...
  • 其实我有点不清楚你在做什么。为什么你要在用户离开时呈现一些东西,然后在他们回来之前将其关闭?他们将永远无法与之互动,那有什么意义呢?您是否只是想阻止某些内容出现在快照图像中?如果是这样,那不是这样做的。
  • 在用户离开之前致电dismiss... 对我来说不是一个选项。在我的具体情况下,如果用户通过application:openURL:sourceApplication:annotation: 进入,我需要关闭模态视图,或者如果用户直接从主屏幕重新启动应用程序,则让用户在模态视图中继续他们的工作流程。
  • 啊哈,感谢您澄清这一点。您可能需要编辑原始问题以更清楚地说明这一点。

标签: ios ios7 uiviewcontroller uikit


【解决方案1】:

根据您的评论,唯一实际的问题是当应用收到application:openURL:sourceApplication:annotation: 并因此被带到最前面时会发生什么。

在这种情况下,只需在application:openURL:sourceApplication:annotation: 中调整您的界面 - 这是其目的的一部分,允许您这样做。在“快照”被撕掉之前,您会得到一些时间,所以如果所涉及的调整是关闭现有的模态视图,请在没有动画的情况下将其关闭。

用户仍然会看到模态视图片刻,但不是真的 - 用户看到的不是您的界面,而是应用程序运行时系统创建的“快照”进入后台。 “快照”被移除以显示实际界面(在 iOS 7 中具有很好的淡入淡出效果)。

如果“快照”本身有问题,有办法阻止它被拍摄,但在我看来,这不是那种情况。

(顺便说一句,这提出了一个问题,即呈现的视图如何知道它必须被解除。最初的主要操作是在您的应用程序委托中,这可能与呈现的视图有一些概念上的距离。这将是使用 NSNotification 跨此距离进行通信的合适情况。)

【讨论】:

  • 你知道我可以覆盖的回调或委托吗?当我在application:openURL:sourceApplication:annotation: 中尝试时,我在控制台中收到attempt to dismiss modal view controller whose view does not currently appear. 警告。
  • 那么它一定已经被解雇了。这听起来像是另一个问题。或者你的应用程序可能在后台终止,所以我们从头开始;显然,您需要检查一下。
  • 谢谢!很好的答案。
  • 当然这是使用 NSNotification 的另一个原因!如果呈现的视图控制器注册为接收通知并在通知到达时自行关闭,那么发布它并没有什么害处,因为呈现的视图控制器在那里并且将作为响应关闭自己,或者呈现的视图控制器是不在那里,什么都不会发生!
猜你喜欢
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多