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

dug*_*gla 18 subview uiview superview ios

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

干杯,
道格

Sco*_*bes 24

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

[randomChildView.window.subviews objectAtIndex:0]

或者您可以通过检查view.superview直到找到其超视图的视图来递归爬出层次结构nil.

  • 你可能想要仔细检查一下你会发现"superview是nil"我试过这个并且陷入无限循环. (2认同)

TJe*_*Jez 11

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

- (UIView *)rootView {
    UIView *view = self;
    while (view.superview != Nil) {
        view = view.superview;
    }
    return view;
}
Run Code Online (Sandbox Code Playgroud)

swift3/4:

func rootSuperView() -> UIView
{
    var view = self
    while let s = view.superview {
        view = s
    }
    return view
}
Run Code Online (Sandbox Code Playgroud)