So, I've updated to Xcode 10 and iOS 12 today and now I'm getting the following error message when I call topViewController from UINavigationController:
Ambiguous use of 'topViewController'
if let myVC = navigationController.topViewController as? MyViewController {}
Even though the following code works just fine.
if let myVC = navigationController.visibleViewController as? MyViewController {}
Does anyone know any changes in iOS 12 regarding this?
I can suggest you this func for getting topViewContoller as an extension. Easy to use as you guess.
extension UIApplication {
class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let navigationController = controller as? UINavigationController {
return topViewController(controller: navigationController.visibleViewController)
}
if let tabController = controller as? UITabBarController {
if let selected = tabController.selectedViewController {
return topViewController(controller: selected)
}
}
if let presented = controller?.presentedViewController {
return topViewController(controller: presented)
}
return controller
}
}
Usage:
UIApplication.topViewController()