检测用户退出应用程序的屏幕

Detecting which screen user exited app

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

我想知道我们是否可以检测到用户从哪个视图控制器退出或退出应用程序(通过主页按钮,甚至可能是 phone 调用等等...)。我正在开发一款用户一次问彼此多个问题的游戏,我想确保如果用户查看第一个问题,回答不正确并在回答第二个问题之前退出应用程序,他/她将无法访问第一个在应用重启时再次提问。我希望这样,如果应用程序在此视图控制器上退出,用户将获得 0 分。

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

添加此扩展程序:

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
    }
}

然后你AppDelegatesapplicationDidEnterBackground称呼它:

func applicationDidEnterBackground(_ application: UIApplication) {
    if let viewController = UIApplication.topViewController() {
        print(viewController)
    }
}

将打印出:

<TestApp.MenuController: 0x7ff2bb501940>