是否有 BOOL 或其他方式知道 viewDidLoad: 是否已被调用?
每次我的视图进入活动状态时,我都需要更改视图属性,但如果视图尚未加载,我不想过早触发 viewDidLoad:。如果无法轻松判断 viewDidLoad: 是否已被调用,我将简单地在视图控制器 init 中添加一个名为加载设置为 NO 的 BOOL,然后在加载为 YES 或在 viewWillAppear 中输入活动后更改视图属性:如果加载为否,则将加载设置为是。
是否有 BOOL 或其他方式知道 viewDidLoad: 是否已被调用?
每次我的视图进入活动状态时,我都需要更改视图属性,但如果视图尚未加载,我不想过早触发 viewDidLoad:。如果无法轻松判断 viewDidLoad: 是否已被调用,我将简单地在视图控制器 init 中添加一个名为加载设置为 NO 的 BOOL,然后在加载为 YES 或在 viewWillAppear 中输入活动后更改视图属性:如果加载为否,则将加载设置为是。
使用isViewLoaded
. 除此之外,它完全符合您的要求,没有太多可说的。文档很简单:
调用此方法会报告视图是否已加载。与 view 属性不同,如果视图不在内存中,它不会尝试加载视图。
也许您应该在其中初始化您的 UIView viewDidLoad
,然后以您需要的任何方式更改它viewWillLayoutSubviews
。
这是对这个问题的迂腐回答。如果你想知道什么时候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
不会被调用: