UIView. Как быстро найти Root SuperView?
У меня есть случайный дочерний вид в иерархии представлений. Каков наилучший/быстрый/умный способ добраться до корневого супервизора?
Cheers,
Дуг
Ответы
Ответ 1
Если ваше приложение имеет только один UIWindow
(обычно true), и если это окно только subview является вашим представлением корневого контроллера (также обычно это верно):
[randomChildView.window.subviews objectAtIndex:0]
Или вы можете рекурсивно выбраться из иерархии, проверив view.superview
, пока не найдете представление, чей супервизор nil
.
Ответ 2
Это незначительное количество процессорного времени, чтобы идти прямо вверх по иерархии супервизора. У меня это в моей категории 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
}