我在视图层次结构中有一个随机的子视图。什么是获得根超级视图的最佳/最快/最聪明的方法?
干杯,
道格
答案 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
}
}