Подтвердить что ты не робот

UIView. Как быстро найти Root SuperView?

У меня есть случайный дочерний вид в иерархии представлений. Каков наилучший/быстрый/умный способ добраться до корневого супервизора?

Cheers,
Дуг

4b9b3361

Ответ 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
}