18

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

干杯,
道格

4

4 回答 4

25

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

[randomChildView.window.subviews objectAtIndex:0]

或者,您可以递归地爬出层次结构,通过检查view.superview直到找到其父视图为nil.

于 2011-05-29T00:05:05.523 回答
11

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

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

迅速3/4:

func rootSuperView() -> UIView
{
    var view = self
    while let s = view.superview {
        view = s
    }
    return view
}
于 2013-11-08T13:52:27.913 回答
0

我喜欢这一个。

extension UIView {
    func rootView() -> UIView {
        return superview?.rootView() ?? superview ?? self
    }
}
于 2018-05-30T13:56:41.073 回答
0

快速解决方案(极简主义中的快速):

extension UIView {
    var rootView: UIView {
        superview?.rootView ?? self
    }
}
于 2021-02-27T14:26:47.913 回答