2017-08-25 51 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

相关问题