Swift拿到window當(dāng)前控制器ViewController

第一種

public extension UIWindow {
    
    public func topMostWindowController()->UIViewController? {
        
        var topController = rootViewController
        
        while let presentedController = topController?.presentedViewController {
            topController = presentedController
        }
        
        return topController
    }
    
    public func currentViewController()->UIViewController? {
        
        var currentViewController = topMostWindowController()
        if currentViewController is UITabBarController{
            currentViewController = (currentViewController as! UITabBarController).selectedViewController
        }
        while currentViewController != nil && currentViewController is UINavigationController && (currentViewController as! UINavigationController).topViewController != nil {
            currentViewController = (currentViewController as! UINavigationController).topViewController
        }
        
        return currentViewController
    }
}

調(diào)用:

let kAppDelegate = UIApplication.shared.delegate as! AppDelegate
var kWindow = kAppDelegate.window
kWindow?.currentViewController()?.present(alertVC, animated: true, completion: nil)

第二種,UIViewController


let kAppDelegate = UIApplication.shared.delegate as! AppDelegate
var kWindow = kAppDelegate.window

var currentViewController: UIViewController?{
        let firstView = kWindow?.subviews.first
        let secondView = firstView?.subviews.first
        guard let vc = secondView?.parentController else {
            kWindow?.makeKeyAndVisible()
            return (kWindow?.rootViewController as? UINavigationController)?.visibleViewController
        }
        if vc.isKind(of: UITabBarController.self) {
            let tab = vc as! UITabBarController
            guard tab.selectedViewController!.isKind(of: UINavigationController.self) else {
                return tab.selectedViewController
            }
            let nav = tab.selectedViewController as! UINavigationController
            return nav.viewControllers.last
        }
        else if vc.isKind(of: UINavigationController.self) {
            let nav = vc as! UINavigationController
            return nav.viewControllers.last
        }
        else {
            return vc
        }
    }

extension UIView {
    var parentController: UIViewController?
    {
        var responder = self.next
        while (responder != nil) {
            if responder!.isKind(of: UIViewController.self) {
                return responder as? UIViewController
            }
            responder = responder!.next
        }
        return nil
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容