2017-08-25 49 views
3

此問題適用於不使用nib文件的程序化應用程序,其中故事板已被刪除,並且創建窗口並在應用程序委託中爲其提供根視圖。一些接受的答案,我在這裏讀的出現與蘋果公司的文件有衝突,所以告訴我,如果這是正確的:程序化UI:不要調用super.loadView,而是調用super.viewDidLoad?

當創建一個UIViewController,創造它的基礎的方法應該放在loadView沒有調用super.loadView

override func loadView() { 

    // build something 
    buildSomething() 

} 

,以及使最後的潤色的方法應該放在viewDidLoad調用super.viewDidLoad

// view did load 
override func viewDidLoad() { 
    super.viewDidLoad() 

    // arrange something that requires it be built first 
    arrangeSomething() 

} 

還是應該super.viewDidLoad()只在特殊情況下被調用?如果是這樣,他們是什麼?

+0

「有些......與Apple文檔有衝突......」 ...除非您編輯您的問題以包含對它們的引用,否則我們顯然無法評論這些問題。 – Rob

回答

4

這是正確的,如果你實施loadView你不應該打電話super。由於the documentation說:

您的自定義實施此方法不應該調用super

但是,如果您實施viewDidLoad,則應該始終致電super

+0

後續工作:當以編程方式做所有事情時,應該只在應用程序委託中調用UIWindow一次,對嗎?然後當創建一個UIViewController時,Apple說要將視圖層次結構的根視圖分配給視圖屬性,這意味着創建一個UIView界面並將其附加到self.view? – sconewolf

+0

@sconewolf - 是的。請參閱舊版[適用於iOS的View Controller編程指南](https://developer.apple.com/legacy/library/documentation/WindowsViews/Conceptual/ViewControllerPGforiOSLegacy/BasicViewControllers/BasicViewControllers.html)中的「以編程方式創建視圖」。我對你的評論的唯一改進就是設置'view'的邊界真的屬於任何人提出的(例如在'application(_:didFinishLaunchingWithOptions:)',而不是'loadView'中。視圖控制器不知道它是否是否全屏或不顯示,誰提出它 – Rob

+0

這些概念是非常有意義的,所以我拿出了super.loadView,現在我的UIPageViewController顯得很奇怪,你會介意看看(如果你也是如此的自由編輯)我剛創建的這個公共Gist?https://gist.github.com/sconewolf/22f5767193df9148ca15c894ffcce4de – sconewolf

相關問題