美文网首页OC-开发案例收集iOS开发
iOS开发之获取父控制器

iOS开发之获取父控制器

作者: 悄然林静 | 来源:发表于2018-10-31 08:30 被阅读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
}

相关文章

网友评论

    本文标题:iOS开发之获取父控制器

    本文链接:https://www.haomeiwen.com/subject/tojotqtx.html