I have a random child view in a view hierarchy. What is the best/fastest/cleverest way to get to the root superview?
Cheers,
Doug
If your app only has one UIWindow
(usually true), and if that window's only subview is your root controller's view (also usually true):
[randomChildView.window.subviews objectAtIndex:0]
Or you could recursively climb out of the hierarchy, by checking view.superview
until you find a view whose superview is nil
.
It's an insignificant amount of processor time to go straight up the superview hierarchy. I have this in my UIView category.
- (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
}
I like this one.
extension UIView {
func rootView() -> UIView {
return superview?.rootView() ?? superview ?? self
}
}
Fast solution (fast as in minimalist):
extension UIView {
var rootView: UIView {
superview?.rootView ?? self
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With