18

是否有 BOOL 或其他方式知道 viewDidLoad: 是否已被调用?

每次我的视图进入活动状态时,我都需要更改视图属性,但如果视图尚未加载,我不想过早触发 viewDidLoad:。如果无法轻松判断 viewDidLoad: 是否已被调用,我将简单地在视图控制器 init 中添加一个名为加载设置为 NO 的 BOOL,然后在加载为 YES 或在 viewWillAppear 中输入活动后更改视图属性:如果加载为否,则将加载设置为是。

4

3 回答 3

63

使用isViewLoaded. 除此之外,它完全符合您的要求,没有太多可说的。文档很简单:

调用此方法会报告视图是否已加载。与 view 属性不同,如果视图不在内存中,它不会尝试加载视图。

于 2013-10-18T21:05:43.480 回答
1

也许您应该在其中初始化您的 UIView viewDidLoad,然后以您需要的任何方式更改它viewWillLayoutSubviews

于 2013-10-18T22:46:58.280 回答
1

这是对这个问题的迂腐回答。如果你想知道什么时候viewDidLoad被触发,你必须viewDidLoad在你的视图控制器中实现

- (void)viewDidLoad
{
    [super viewDidLoad];

    viewDidLoadCalled = YES; // Not actually the best way to do this...
    // Set up more view properties
}

但正如汤米所说,你实际上需要使用isViewLoaded. 这解决了进行检查的问题

if (!self.view) {
    // do something
}

它通过询问它无意中加载了视图。

请注意,在viewWillAppear:调用时,视图将始终已加载。此外,在旧版本(我认为是 iOS 6 之前的版本)上,视图可以在视图控制器的生命周期内多次卸载和重新加载。有关旧行为,请参阅非常漂亮的 Big Nerd Ranch 视图生命周期图。在 iOS 6+ 中几乎相同,只是视图在内存不足的情况下不会卸载并且viewDidUnload不会被调用:

在此处输入图像描述

于 2013-10-29T21:40:58.347 回答