2010-08-06 71 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