使用loadView时未调用viewDidLoad

时间:2011-01-11 00:26:04

标签: iphone objective-c xcode viewdidload loadview

任何人都可以解释为什么在使用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];
}

3 个答案:

答案 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委托。