Get top most UIViewController

后端 未结 24 2184
别那么骄傲
别那么骄傲 2020-11-22 14:47

I can\'t seem to get the top most UIViewController without access to a UINavigationController. Here is what I have so far:

UIApplic         


        
24条回答
  •  一向
    一向 (楼主)
    2020-11-22 15:36

    Based on Bob -c above:

    Swift 3.0

    extension UIWindow {
    
    
        func visibleViewController() -> UIViewController? {
            if let rootViewController: UIViewController  = self.rootViewController {
                return UIWindow.getVisibleViewControllerFrom(vc: rootViewController)
            }
            return nil
        }
    
        class func getVisibleViewControllerFrom(vc:UIViewController) -> UIViewController {
    
            if vc.isKind(of: UINavigationController.self) {
    
                let navigationController = vc as! UINavigationController
                return UIWindow.getVisibleViewControllerFrom( vc: navigationController.visibleViewController!)
    
            } else if vc.isKind(of: UITabBarController.self) {
    
                let tabBarController = vc as! UITabBarController
                return UIWindow.getVisibleViewControllerFrom(vc: tabBarController.selectedViewController!)
    
            } else {
    
                if let presentedViewController = vc.presentedViewController {
    
                    return UIWindow.getVisibleViewControllerFrom(vc: presentedViewController)
    
                } else {
    
                    return vc;
                }
            }
        }
    }
    

提交回复
热议问题