10

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

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

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

有没有更直接的方法?

4

3 回答 3

20

As of iOS 9.0, in Swift, you can do this in your view controller:

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

or this if you want to actually use the view:

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

For older versions of iOS, in Objective-C:

if (self.isViewLoaded && self.view.window != nil) {
    // view is in a view hierarchy and should be updated
}
于 2012-12-05T02:48:27.920 回答
1

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

于 2012-12-05T03:05:59.080 回答
-1

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

// From a UIViewController sub-class
if !self.isViewLoaded {
    // view is not in the view hierarchy
}
于 2018-12-05T15:15:29.687 回答