我在视图层次结构中有一个随机子视图。到达根超级视图的最佳/最快/最聪明的方法是什么?
干杯,
道格
如果您的应用程序只有一个UIWindow
(通常为 true),并且该窗口的唯一子视图是您的根控制器的视图(通常也为 true):
[randomChildView.window.subviews objectAtIndex:0]
或者,您可以递归地爬出层次结构,通过检查view.superview
直到找到其父视图为nil
.
直接进入超级视图层次结构的处理器时间是微不足道的。我的 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
}
我喜欢这一个。
extension UIView {
func rootView() -> UIView {
return superview?.rootView() ?? superview ?? self
}
}
快速解决方案(极简主义中的快速):
extension UIView {
var rootView: UIView {
superview?.rootView ?? self
}
}