获取视图view所在的控制器

来源:互联网 发布:电脑能看淘宝直播吗 编辑:程序博客网 时间:2024/05/16 06:26

在开发过程中,难免会使用到自定义控件,自定义 cell,或在MVC 的 View 层中使用到 view所在的控制器。

比如说: 在自定义的 view类中 点击某个按钮,跳转到下一个界面,如果我们能在view类中直接获取控制器,也就进一步让 控制器与视图View解耦合了

这里可以通过响应者链的方式获取到当前 view 所在的控制器

extension UIView {    //获取view所在的 视图控制器    var viewController: UIViewController? {        get {            var nextResponder = next            while  (nextResponder != nil){                if nextResponder is UIViewController {                    return nextResponder as! UIViewController?                }                nextResponder = nextResponder?.next            }            return nil        }    }    //获取view所在的 导航控制器    var navController: UINavigationController? {        get {            var nextResponder = next            while  (nextResponder != nil){                if nextResponder is UIViewController {                    return nextResponder as! UINavigationController?                }                nextResponder = nextResponder?.next            }            return nil        }    }    //获取view所在的 标签控制器    var tabBarController: UITabBarController? {        get {            var nextResponder = next            while  (nextResponder != nil){                if nextResponder is UIViewController {                    return nextResponder as! UITabBarController?                }                nextResponder = nextResponder?.next            }            return nil        }    }}

将分类导入项目后,任何一个一个view 在任何地方都能随意获取到它所在的控制器,是不是很简单!

如有问题,欢迎评论交流!

1 0