【发布时间】:2011-08-31 12:14:09
【问题描述】:
我想在后台运行一段时间后将用户锁定在我的应用之外。我在 AppDelegate 的applicationWillEnterForeground 中发现了这一点(并与存储在applicationWillResignActive 中的时间进行比较)。如果小于超时时间,则不执行任何操作。如果超过我调用的超时时间:
[_navigationController popToRootViewControllerAnimated:NO];
这会将用户带回根视图。
它在一个视觉中断的情况下工作得很好。先前的视图(当应用程序处于非活动状态时用户正在查看的视图)在弹出到 root 之前非常短暂地出现。在测试中,该视图似乎在调用 applicationWillEnterForeground 之前重新出现。
我唯一的想法是在不活动之前隐藏所有内容,例如用填充的矩形遮挡视图。这对我来说闻起来像是一种肮脏的黑客行为,所以我在想有更好的方法。
我也愿意以不同的方式达到相同的最终结果。谢谢!
【问题讨论】:
-
你到底是从哪里调用 popToRootViewController 方法的?
-
@TheBlack:我在 Application Delegate 的
applicationWillEnterForeground方法中调用[_navigationController popToRootViewControllerAnimated:NO]。 -
如果您在 applicationWillResignActive 中弹出视图控制器,您的问题将得到解决,但这不符合您的概念。无论如何,在 applicationWillResignActive 中弹出 VC 是正确的地方。我的解决方案是始终弹出 VC 并在用户在某个时间间隔返回应用程序时恢复它们。
-
我已经通过使视图不可见来解决这个问题。在
applicationWillResignActive中,我有_navigationController.view.alpha=0;,并且在(如有必要)弹出登录视图之后,我将_navigationController.view.alpha=100;放置在applicationWillEnterForeground中。比弹出和恢复视图(在这种情况下非常繁重)更容易。如果有人对手头的问题有解决方案,我会暂时保持开放状态。 -
你想出的是完全有效的解决方案。此外,UIView 具有名为“隐藏”的属性,您也可以使用它:)
标签: ios uinavigationcontroller uiapplicationdelegate