UIView. How Do I Find the Root SuperView Fast?
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
.
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
}
}
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
}