UIView的。如何快速找到Root SuperView?

时间:2011-05-28 23:25:36

标签: ios uiview subview superview

我在视图层次结构中有一个随机的子视图。什么是获得根超级视图的最佳/最快/最聪明的方法?

干杯,
道格

4 个答案:

答案 0 :(得分:24)

如果您的应用只有一个UIWindow(通常为真),并且该窗口的唯一子视图是您的根控制器的视图(通常也是如此):

[randomChildView.window.subviews objectAtIndex:0]

或者,您可以通过选中view.superview递归爬出层次结构,直到找到超级视图为nil的视图。

答案 1 :(得分:11)

直接超级视图层次结构的处理器时间是微不足道的。我在UIView类别中有这个。

- (UIView *)rootView {
    UIView *view = self;
    while (view.superview != Nil) {
        view = view.superview;
    }
    return view;
}

swift3 / 4:

func rootSuperView() -> UIView
{
    var view = self
    while let s = view.superview {
        view = s
    }
    return view
}

答案 2 :(得分:0)

快速解决方案(极简中一样快):

extension UIView {
    var rootView: UIView {
        superview?.rootView ?? self
    }
}

答案 3 :(得分:-1)

我喜欢这个。

extension UIView {
    func rootView() -> UIView {
        return superview?.rootView() ?? superview ?? self
    }
}