Get top most UIViewController

后端 未结 24 2150
别那么骄傲
别那么骄傲 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条回答
  •  Happy的楠姐
    2020-11-22 15:40

    iOS13+ //top Most view Controller

    extension UIViewController {
        func topMostViewController() -> UIViewController {
            if self.presentedViewController == nil {
                return self
            }
            if let navigation = self.presentedViewController as? UINavigationController {
                return navigation.visibleViewController!.topMostViewController()
            }
            if let tab = self.presentedViewController as? UITabBarController {
                if let selectedTab = tab.selectedViewController {
                    return selectedTab.topMostViewController()
                }
                return tab.topMostViewController()
            }
            return self.presentedViewController!.topMostViewController()
        }
    }
    
    extension UIApplication {
        func topMostViewController() -> UIViewController? {
            return UIWindow.key!.rootViewController?.topMostViewController()
        }
    }
    
    extension UIWindow {
        static var key: UIWindow? {
            if #available(iOS 13, *) {
                return UIApplication.shared.windows.first { $0.isKeyWindow }
            } else {
                return UIApplication.shared.keyWindow
            }
        }
    }
    
    //use let vc = UIApplication.shared.topMostViewController()
    
    // End top Most view Controller
    

提交回复
热议问题