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

标签 ios swift uiviewcontroller appdelegate

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

我想知道我们是否可以检测到用户是从哪个 View Controller 退出或退出应用程序(通过主页按钮,甚至可能是打进来的电话等...)。我正在开发一款用户一次问彼此多个问题的游戏,我想确保如果用户查看第一个问题,回答不正确并在回答第二个问题之前退出应用程序,他/她将无法访问第一个在应用重启时再次提问。我希望这样,如果应用程序在此 View Controller 上退出,用户将获得 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>

关于ios - 检测用户退出应用程序的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46351579/

相关文章:

iphone - TVOutManager 在模拟器上工作,但不在设备上工作?

ios - 了解uiview和uiviewcontroller

ios - 在使用appium时,我们如何将设备方向更改为横向模式?

ios - 当我从另一个类调用方法时 tableView reloadData 不工作

ios - Swift - 单击按钮更改 UIPageViewController View

ios - 使用 UISwitch 从数组中删除对象

swift - 从自定义单元格 Nib 推送到 viewController

ios - 检查 segue 标识符而不是使用失败的类型转换有好处吗?

ios - 如何向 UITableViewCells Swift 添加多个按钮

ios - 从呈现的 View 更改 UITableViewCell 的属性