子视图获取父视图的视图控制器的方法

在swift开发iOS中,当我们对界面中的cell,item,uimageview等进行点击,选中的操作时,需要进行跳转到其它视图控制器的动作,但是在cell,item,uimageview的内部是不能直接获取视图控制器,这时往往需要使用代理,闭包的方法回到父视图的控制器进行跳转,很是麻烦,下面是在cell,item,uimageview中直接获取父视图的控制器的代码:

func nextresponsder(viewself:UIView)->UIViewController{
        var vc:UIResponder = viewself
        while vc.isKindOfClass(UIViewController) != true {
            vc = vc.nextResponder()!
        }
        return vc as! UIViewController
    }

这段代码有很多oc版本,很多人看不懂oc,所以翻译成swift的。
接下来是阐述代码的原理:在ios开发中每一个view有superview和subviews,同时view可以通过superview和subview来获取其父视图和子视图;类比于此,每一个view controller也有其父控制器和子控制器称为parentcontroller和childcontroller;要注意uiview和uiviewcontroller都是uiresponsder的子类,当前视图可以通过nextresponsder的方法获取其父类型,这种类型组成一条控制链,当获取的视图没有父视图时,就可以获得该视图所在的视图控制器。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容