在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的方法获取其父类型,这种类型组成一条控制链,当获取的视图没有父视图时,就可以获得该视图所在的视图控制器。
网友评论