[英]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.