2012-03-05 415 views
18

我以爲我不應該調用[super loadView],但有些事情讓我感到困惑。可以調用[super loadView]嗎?

在的loadView的描述(UIViewController Class Reference)這是說,「你這個方法的自定義實現不應該稱之爲超級」, 但ZoomingPDFViewer例如,他們給,的loadView實現(ZoomingPDFViewerViewController)被調用[超級的loadView]。

我試圖從我的loadView方法調用它,它工作正常,但我只是不明白,那麼不稱呼超級。

回答

25

您絕對不應該撥打[super loadView]。我會說你在ZoomingPDFViewer例子中發現了一個bug。

當您想以編程方式爲視圖控制器(不使用xib)創建視圖層次結構時,您覆蓋loadView

正如您所指出的,文檔明確指出您不應該調用super。

此方法的自定義實現不應調用超級。

我假定這是爲了避免裝載無論從XIB和編程創建視圖,作爲該方法中所使用的基體到從XIB加載的圖:

如果視圖控制器具有一個關聯的nib文件,此方法從nib文件加載 視圖。

還要注意的是,即使你UIViewController對象的分配過程中傳遞零的nibNameOrNil參數的UIViewController實施loadView將嘗試加載任何廈門國際銀行與它相關聯的類名。

視圖控制器具有相關聯的筆尖文件,如果nibName屬性 返回一個非零值,如果視圖控制器是從故事板實例 ,如果顯式使用所分配的其一個筆尖 文件發生initWithNibName:bundle:method,,或者如果iOS在應用程序包中找到一個帶有基於視圖控制器的 類名的名稱的筆尖 文件。如果視圖控制器沒有關聯的筆尖 文件,則此方法會創建一個普通的UIView對象。

這種方法的真正意圖是給你建立視圖層次的完全控制,而不依賴於內置的廈門國際銀行加載機制:

您可以覆蓋此方法,以創建手動查看。

就個人而言,我重寫loadView,如果:1)我會做它的廈門國際銀行真是小巫見大巫或2)控制的佈局是非常動態的,所以創造了廈門國際銀行與靜態佈局有什麼好處。

+1

+1標記的長度連同清晰/簡潔...... – Damo 2012-03-05 16:41:45

0

如果您沒有在您的IB中創建視圖,那麼您應該在代碼中調用[super loadView]以查看您的程序。

如果您的自定義視圖,你想用interfaz生成器創建一個視圖,所以你不需要調用它。

+0

好吧,但是這意味着什麼?「你的這個方法的自定義實現不應該調用super。」? – Aleksa 2012-03-05 16:06:35

+1

這意味着你正在創建視圖,所以你不需要讓你的超級加載它 – 2012-03-05 16:07:50

+1

你給你的程序的看法做一些事情:'UIView * myView = [[[[UIView alloc] init] autorelease]; ...(創建視圖層次結構)... self.view = myView;'如果您沒有將'self.view'賦值給一個新的值,那麼重載'loadView'開始的重點是什麼? – Sam 2012-03-05 16:15:58

1

NSViewController嘗試在-loadView中初始化一個視圖中的一個視圖。由於你的控制器沒有設置你的nib名字,它只會給你一個self.view = nil;我會假設UIViewController以同樣的方式工作。

所以它應該是安全的,但你完全沒有必要。

+3

雖然它應該是無害的,但如果有一個基於視圖控制器名稱的名稱的xib,那麼調用'[super loadView]'會將該nib加載到' self.view'。我從來沒有見過這種情況(因爲我從來沒有稱過超級),但基於我期望的文檔。另外,我認爲調用'[super loadView]'最低限度地將一個通用視圖分配給'self.view',這就是你的代碼應該做的事情。再次,這不會傷害任何東西(假設在調用super之後'loadView'的自定義實現爲'self.view'賦值),但這是浪費的。 – Sam 2012-03-05 16:18:42

0

如果以編程方式創建ViewController,則可以在override func loadView()的開頭調用super.loadView()而不是self.view = UIView(frame: UIScreen.main.bounds)來構建視圖層。但是,您不應該撥打super.loadView()並同時創建自定義UIViewController.view。 只是不喜歡一個機器人來解釋蘋果的文檔。

相關問題