3

谁能解释为什么在使用 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];
}
4

3 回答 3

7

我刚刚发现,如果您在应用程序中手动调用 loadView,则不会调用 viewDidLoad。如果你手动调用 loadView,你也必须手动调用 viewDidLoad。

根据苹果文档,您不应该调用 [super loadView],因为它会用默认的 UIView 覆盖您的视图。

于 2011-01-25T10:41:30.067 回答
3

您必须在此处收到警告:

NSLog("VIEW DID LOAD!");

相反,你应该这样写(@ 符号是必要的):

NSLog(@"VIEW DID LOAD!");
于 2011-01-11T00:57:53.203 回答
1

创建 ViewController 实例时不会调用 viewDidLoad。当您将其推送到导航控制器或将其呈现为模型视图控制器时,只会调用 viewDidLoad。除非您正在展示 viewController,否则这些委托将不会被调用。还有一件事,如果您的视图控制器演示结束,并且仍然保留在堆栈或内存中,则不会再次调用 viewDidLoad 方法,因为它已经加载了视图。然后 viewWillAppear 和 viewDidAppear 代表只有在您呈现相同的 viewController 时才会被调用。

于 2013-03-14T17:59:51.873 回答