Есть куча реализаций, например вот
```
extension UIApplication {
var topViewController: UIViewController? {
guard let vc = UIApplication.shared.keyWindow?.rootViewController else { return nil }
var topController = vc
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
return topController
}
}
```
Но может есть более лаконичный или корректный вариант?
Вот что нашел еще func getVisibleViewController(_ rootViewController: UIViewController?) -> UIViewController? { var rootVC = rootViewController if rootVC == nil { rootVC = UIApplication.shared.keyWindow?.rootViewController } if rootVC?.presentedViewController == nil { return rootVC } if let presented = rootVC?.presentedViewController { if presented.isKind(of: UINavigationController.self) { let navigationController = presented as! UINavigationController return navigationController.viewControllers.last! } if presented.isKind(of: UITabBarController.self) { let tabBarController = presented as! UITabBarController return tabBarController.selectedViewController! } return getVisibleViewController(presented) } return nil }
Обсуждают сегодня