UIView.Как быстро найти Root SuperView? - PullRequest
18 голосов
/ 29 мая 2011

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

Cheers,
Doug

Ответы [ 3 ]

24 голосов
/ 29 мая 2011

Если в вашем приложении есть только один UIWindow (обычно true), и если единственным подпредставлением этого окна является представление вашего корневого контроллера (также обычно true):

[randomChildView.window.subviews objectAtIndex:0]

Или вы можете рекурсивно вылезти из иерархии, проверяя view.superview, пока не найдете представление с суперпредставлением nil.

11 голосов
/ 08 ноября 2013

Это незначительное количество процессорного времени, чтобы идти вверх по иерархии суперпредставления. У меня есть это в моей категории 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
}
0 голосов
/ 30 мая 2018

Мне нравится этот.

extension UIView {
    func rootView() -> UIView {
        return superview?.rootView() ?? superview ?? self
    }
}
...