任何人都可以解释为什么在使用loadView时不会调用viewDidLoad?我的理解是viewDidLoad应该仍然被调用。
- (void)loadView
{
CGRect currentFrame = [[UIScreen mainScreen] applicationFrame];
UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(currentFrame.origin.x, currentFrame.origin.y, currentFrame.size.width, currentFrame.size.height)];
myView.backgroundColor = [UIColor redColor];
self.view = myView;
[myView release];
[super loadView];
}
- (void)viewDidLoad {
//this never happens
NSLog(@"VIEW DID LOAD!");
[super viewDidLoad];
}
答案 0 :(得分:7)
我刚刚发现,如果在应用程序中手动调用loadView,则不会调用viewDidLoad。 如果手动调用loadView,也必须手动调用viewDidLoad。
根据apple docs,你不应该调用[super loadView],因为它会用默认的UIView覆盖你的视图。
答案 1 :(得分:3)
您必须在此处发出警告:
NSLog("VIEW DID LOAD!");
相反,你应该这样写(@符号是必要的):
NSLog(@"VIEW DID LOAD!");
答案 2 :(得分:1)
创建ViewController实例时不会调用viewDidLoad。当您将其推送到导航控制器或将其作为模型视图控制器呈现时,只会调用viewDidLoad。除非您呈现viewController,否则这些委托将不会被调用。还有一件事,如果你的viewcontroller表示结束,但它仍然保留在堆栈或内存中,那么viewDidLoad方法将不再被调用,因为它已经加载了视图。然后,只有在呈现相同的viewController时才会调用viewWillAppear和viewDidAppear委托。