How to find topmost view controller on iOS

后端 未结 30 2947
遥遥无期
遥遥无期 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:14

    For latest Swift Version:
    Create a file, name it UIWindowExtension.swift and paste the following snippet:

    import UIKit
    
    public extension UIWindow {
        public var visibleViewController: UIViewController? {
            return UIWindow.getVisibleViewControllerFrom(self.rootViewController)
        }
    
        public static func getVisibleViewControllerFrom(vc: UIViewController?) -> UIViewController? {
            if let nc = vc as? UINavigationController {
                return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController)
            } else if let tc = vc as? UITabBarController {
                return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController)
            } else {
                if let pvc = vc?.presentedViewController {
                    return UIWindow.getVisibleViewControllerFrom(pvc)
                } else {
                    return vc
                }
            }
        }
    }
    
    func getTopViewController() -> UIViewController? {
        let appDelegate = UIApplication.sharedApplication().delegate
        if let window = appDelegate!.window {
            return window?.visibleViewController
        }
        return nil
    }
    

    Use it anywhere as:

    if let topVC = getTopViewController() {
    
    }
    

提交回复
热议问题