Swift获取当前试图的控制器

一、解决的问题

在UIView中快速查找对应UIViewController、UINavigationController或者指定控制器的方法,原理根据事件的响应链,向上查找。

二、具体实现代码

xtension UIView {
    
    func findController() -> UIViewController! {
        return self.findControllerWithClass(UIViewController.self)
    }
    
    func findNavigator() -> UINavigationController! {
        return self.findControllerWithClass(UINavigationController.self)
    }
    
    func findControllerWithClass(_ clzz: AnyClass) -> T? {
        var responder = self.next
        while(responder != nil) {
            if (responder!.isKind(of: clzz)) {
                return responder as? T
            }
            responder = responder?.next
        }
        return nil
    }
}

你可能感兴趣的:(Swift获取当前试图的控制器)