【问题标题】:Detecting which screen user exited app检测哪个屏幕用户退出了应用程序
【发布时间】:2018-03-03 06:11:01
【问题描述】:
到目前为止,我还没有找到任何关于此的内容,因此,如果您能指导或指出我可以解决此问题的方向,我将不胜感激。
我想知道我们是否可以检测到用户从哪个视图控制器退出或退出应用程序(通过主页按钮或什至可能是来电等...)。我正在开发一个游戏,用户一次问多个问题,我想确保如果用户查看第一个问题,回答错误并在回答第二个问题之前退出应用程序,他/她无法访问第一个问题重新启动应用程序时再次提问。我希望它是这样的,以便用户在此视图控制器上退出应用程序的情况下获得 0 分。
【问题讨论】:
标签:
ios
swift
uiviewcontroller
appdelegate
【解决方案1】:
添加这个扩展:
extension UIApplication {
class func topViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return topViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(base: selected)
}
}
if let presented = base?.presentedViewController {
return topViewController(base: presented)
}
return base
}
}
然后你 AppDelegates applicationDidEnterBackground 打电话给它:
func applicationDidEnterBackground(_ application: UIApplication) {
if let viewController = UIApplication.topViewController() {
print(viewController)
}
}
将打印出来:
<TestApp.MenuController: 0x7ff2bb501940>
【解决方案2】:
通过在每个视图控制器的每个 viewDidAppear 期间发送通知来自己跟踪应该很简单。比如说,在你的 AppDelegate 中拥有一些东西(单例会更好),监听并更新一些关于最后查看的视图控制器的持久状态。