簡體   English   中英

loadView()和viewDidLoad的職責划分

[英]Division of responsibilities for loadView() and viewDidLoad

在我正在處理的項目中,我有一個視圖控制器,該控制器重寫了loadView()方法,以編程方式設置視圖層次結構。 我很好奇,如果此方法與viewDidLoad()相比有什么要求,或者當loadView()已被覆蓋時后者是否多余。 是否有什么不能做的事情,例如在loadView() ,應該推遲到調用viewDidLoad()之前,還是僅僅是偏愛?

編輯:這個問題的最初措辭有些基於意見。 為了澄清,我感興趣的是是否有任何參考資料表明對於在viewDidLoad()中無法使用的loadView()方法無法使用的方法存在技術限制。

loadView的文檔幾乎可以回答您的問題:

如果使用Interface Builder創建視圖並初始化視圖控制器,則不得重寫此方法。

您可以覆蓋此方法,以便手動創建視圖。 如果選擇這樣做,請將視圖層次結構的根視圖分配給view屬性。 您創建的視圖應該是唯一的實例,並且不應與任何其他視圖控制器對象共享。 您對此方法的自定義實現不應調用super。

如果要執行視圖的任何其他初始化,請在viewDidLoad()方法中執行。

換句話說,如果您嚴格用代碼編寫視圖控制器,則只能覆蓋loadView ,而不能使用筆尖或情節提要。 然后,僅當您有理由使控制器的基本視圖不同於默認情況下的普通舊UIView ,才可以。 請記住,您不得在實現中調用super.loadView()

我將使用viewDidLoad創建和設置要添加到視圖控制器基本視圖的任何子視圖(是否使用loadView )。 也可以將viewDidLoad用於在加載視圖之前無法完成的任何其他設置。

從技術上講,如果您覆蓋loadView來設置自定義基本視圖,則可能已將放置在viewDidLoad中的所有內容放置在loadView 但是我仍然要分開責任。 僅使用loadView (如果需要)來創建和設置控制器的基本視圖。 使用viewDidLoad根據需要以及其他任何控制器設置創建其他子視圖。

還請記住,某些視圖控制器的初始設置屬於初始化程序。 但是,此類代碼無法對任何視圖進行任何引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM