如何检查视图是否在ViewHierarchy中



例如,如果viewController的视图在viewHierarchy中,而我刚刚下载完内容,我想快速更新内容。如果self.view不在viewHierarchy中,我想推迟更新。

我想,我可以添加一个布尔变量来表示这一点,并将其放在viewWillAppear和viewWillDisappear上。

我还可以扫描窗口,看看UIView是否在viewHierarchy中。

有没有更直接的方法?

从iOS 9.0开始,在Swift中,您可以在视图控制器中执行此操作

if viewIfLoaded?.window != nil {
// view should be updated
}

或者如果你想实际使用视图:

if let view = viewIfLoaded, view.window != nil {
// update view
}

对于旧版本的iOS,在Objective-C中:

if (self.isViewLoaded && self.view.window != nil) {
// view is in a view hierarchy and should be updated
}

viewDidLoad只有在视图加载完成后才会被触发。因此,我认为您可以在viewDidLoad本身中添加必要的功能。

要检查它是否不在视图层次结构中,这就足够了:

// From a UIViewController sub-class
if !self.isViewLoaded {
// view is not in the view hierarchy
}

最新更新