Я понимаю, что это было какое-то время, но я просто хотел добавить 2 цента к этому вопросу.
Мне нужно было определить, был ли модально представленный ViewController, когда приложение перешло в фоновый режим, чтобысначала отклоните его.
Сначала я сделал расширение UIWindow
, чтобы вернуть мне текущий ViewController
:
extension UIWindow {
func getCurrentViewController() -> UIViewController? {
guard let rvc = self.rootViewController else {
return nil
}
if let pvc = rvc.presentedViewController {
return pvc
} else if let svc = rvc as? UISplitViewController, svc.viewControllers.count > 0 {
return svc.viewControllers.last!
} else if let nc = rvc as? UINavigationController, nc.viewControllers.count > 0 {
return nc.topViewController!
} else if let tbc = rvc as? UITabBarController {
if let svc = tbc.selectedViewController {
return svc
}
}
return rvc
}
}
Затем я вошел в appDelegate
и добавил тест на applicationDidEnterBackground()
:
func applicationDidEnterBackground(_ application: UIApplication) {
if let vc = self.window?.getCurrentViewController() {
if vc.presentingViewController != nil {
vc.dismiss(animated: false, completion: nil)
}
}
}
Это решение в Swift 3