2010-08-06 59 views

回答

15

当您从NIB加载视图并希望在启动后执行进一步自定义时,请使用viewDidLoad。

如果要以编程方式创建视图(不使用Interface Builder),请使用loadView。

+0

你们都给出了稍微不同的答案,所以我假设没有100%确定的答案? – 2010-08-06 13:31:28

+0

没有上述答案是正确的。使用loadView。如果您需要执行一些与由IB构建的NIB文件生成的视图相关的处理,请仅使用viewDidLoad。 – Cthutu 2010-08-06 14:00:08

+0

理论上讲,你可以说每个人都可以在每种情况下工作。但是,我列出的用法与Apple的文档相同。 – RunLoop 2010-08-06 14:01:08

0

添加子视图中viewDidLoad中。这样,你肯定比视图确实加载并准备好消费更有把握。

0

loadView是实际设置您的视图(设置所有插座,包括self.view)的方法。

viewDidLoad你可以找出它的名字。这是在视图加载(所有插座已设置)之后调用的委托方法,它只是通知控制器现在可以开始使用插座。

viewDidLoad: “在视图控制器已将相关视图加载到内存后调用此方法,无论视图是存储在nib文件中还是以编程方式在loadView方法中创建,都会调用此方法。

loadView: “如果您手动创建视图,则必须重写此方法并使用它创建视图。”

2

对于你的具体问题,你应该在viewDidLoad中添加子视图。因为,如果你覆盖loadView,你必须完成所有的工作,加载所有的视图。

下面是从Apple's documentation的解释:

负载循环过程中发生的步骤如下:

1.

* Some part of your application asks for the view in the view 

控制器的视图属性。

2.

* If the view is not currently in memory, the view controller calls its loadView 

方法。

3.

* The loadView method does one of the following: 

     If you override this method, your implementation is 

负责创建所有 必要的视图和分配 非零值到视图属性。

 If you do not override this method, the default implementation uses 

视图控制器的nibName和nibBundle属性来尝试从指定的笔尖文件加载视图 。如果找不到 指定的笔尖文件,则 会查找名称为 的笔尖文件,该文件与控制器类的视图名称相匹配并加载该文件。

 If no nib file is available, the method creates an empty UIView object 

并将其分配给视图属性。

4.

* The view controller calls its viewDidLoad method to perform any 

额外的负载时间的任务。

+0

任何你不清楚的观点? – vodkhang 2010-08-06 13:54:25

2

其实很简单。如果你没有IB,那么你的UIViewController的视图属性是空的。所以把它设置在loadView!

我只在loadView设置视图而没有别的。

除此之外,在viewDidLoad里面做所有事情。以下是一些示例:

- (void)loadView { 
    CGRect frame = [[UIScreen mainScreen] applicationFrame]; 
    baseView = [[UIView alloc] initWithFrame:frame]; 
    [self setView:baseView]; 
    [baseView release]; 
} 

就是这样!我做完。并永远不会想要添加更多。然后在viewDidLoad中添加我想要的所有子视图。

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    msg = [[UILabel alloc] initWithFrame:CGRectMake(0, 200, 320, 50)]; 
    [msg setText:@"Your profile is empty!"]; 
    [[self view] addSubview:msg]; // hey, I have done my view at loadView, so I have it now 
    [msg release]; 
} 

我可能是错在我的理解:)

0

使用viewDidLoad用于初始化意见和constrols。如果您没有Nib/Xib并且想要您的ViewController具有自定义(而不是UIView)视图,请使用loadView