检测哪个屏幕用户退出应用程序

时间:2017-09-21 19:13:52

标签: ios swift uiviewcontroller appdelegate

到目前为止,我还没有找到任何相关内容,所以如果你能指导或指出我可以解决这个问题的方向,我将非常感激。

我想知道我们是否能够从哪个视图控制器中检测到用户退出或退出应用程序(通过主页按钮,甚至可能是电话等等)。我正在开发一个游戏,用户一次互相问多个问题,我想确保如果用户查看第一个问题,答案错误并在回答第二个问题之前退出应用程序,他/她无法访问第一个问题在重新启动时再次提问。我希望在用户在此视图控制器上退出时,用户获得0分。

2 个答案:

答案 0 :(得分:0)

通过在每个视图控制器的每个viewDidAppear期间发送通知来自己跟踪它应该很简单。比如说,在你的AppDelegate中有一些东西(单例会更好),监听并更新关于最后一个查看控制器的持久状态。

答案 1 :(得分:0)

添加此扩展程序:

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>