在视图层次结构中,我有一个随机的子视图。最好/最快/最聪明的方法是什么,以便可以到达根超级视图?
谢谢,
道格
如果你的应用只有一个 UIWindow
(通常是这样),并且该窗口唯一的子视图是根控制器的视图(也通常是这样):
[randomChildView.window.subviews objectAtIndex:0]
或者您可以通过检查 view.superview
直到找到其父视图为 nil
的视图来递归地向上跳出层次结构。
直接访问父视图层次结构所需的处理器时间很少。我在我的UIView类别中使用这个方法。
- (UIView *)rootView {
UIView *view = self;
while (view.superview != Nil) {
view = view.superview;
}
return view;
}
Swift 3/4:
func rootSuperView() -> UIView
{
var view = self
while let s = view.superview {
view = s
}
return view
}
self.window
。 - DUzunextension UIView {
var rootView: UIView {
superview?.rootView ?? self
}
}
extension UIView {
func rootView() -> UIView {
return superview?.rootView() ?? superview ?? self
}
}