iOS开发之获取父控制器
2018-10-31 本文已影响1589人
悄然林静
iOS中,每个视图View都有两个属性:superview(父控件)、subviews(子控件数组),通过这两个属性,view可以获取到其父视图和子视图。
相似的,每个view controller也有两个属性:parentController(父控制器)、childController(子控制器)。
由于UIView、UIViewController都是UIResponder的子类,根据响应链的原理,可以通过nextResponder方法向上一级获取父控件,直到上一级没有父控件位置,最后获取的就是合适的父控件。
// OC版
- (UIViewController *)viewController {
for (UIView* next = [self superview]; next; next = next.superview) {
UIResponder *nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return (UIViewController *)nextResponder;
}
}
return nil;
}
// swift版
func nextresponsder(viewself:UIView) -> UIViewController {
var vc:UIResponder = viewself
while vc.isKind(of: UIViewController.self) != true {
vc = vc.next!
}
return vc as! UIViewController
}