How to find topmost view controller on iOS

后端 未结 30 2849
遥遥无期
遥遥无期 2020-11-22 08:40

I\'ve run into a couple of cases now where it would be convenient to be able to find the \"topmost\" view controller (the one responsible for the current view), but haven\'t

30条回答
  •  耶瑟儿~
    2020-11-22 09:16

    Getting top most view controller for Swift using extensions

    Code:

    extension UIViewController {
        @objc func topMostViewController() -> UIViewController {
            // Handling Modal views
            if let presentedViewController = self.presentedViewController {
                return presentedViewController.topMostViewController()
            }
            // Handling UIViewController's added as subviews to some other views.
            else {
                for view in self.view.subviews
                {
                    // Key property which most of us are unaware of / rarely use.
                    if let subViewController = view.next {
                        if subViewController is UIViewController {
                            let viewController = subViewController as! UIViewController
                            return viewController.topMostViewController()
                        }
                    }
                }
                return self
            }
        }
    }
    
    extension UITabBarController {
        override func topMostViewController() -> UIViewController {
            return self.selectedViewController!.topMostViewController()
        }
    }
    
    extension UINavigationController {
        override func topMostViewController() -> UIViewController {
            return self.visibleViewController!.topMostViewController()
        }
    }
    

    Usage:

    UIApplication.sharedApplication().keyWindow!.rootViewController!.topMostViewController()
    

提交回复
热议问题