iOS开发之获取父控制器

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
}

你可能感兴趣的:(iOS开发之获取父控制器)