我正在开发一个项目,我在其中使用xib而不是故事板,所以我想从xibs实例化我的UIViewControllers,我看到了两个方法,第一个是
let viewController = UINib(nibName: "ViewController", bundle: NSBundle.mainBundle()).instantiateWithOwner(nil, options: [:]).first as! ViewController
还有这种方法
let viewController = ViewController(nibName: "View", bundle: NSBundle.mainBundle())
我总是看到漂浮在周围。为什么我应该使用第二种方法而不是第一种方法,并且使用第一种方法有不利之处,它被认为是不好的做法吗?澄清第一种方法是从xib实例化整个ViewController。因为在xib中有一个直接放在那里的UIViewController,第二个有视图控制器作为所有者的视图。
答案 0 :(得分:1)
这是一个基于意见的问题(或者更确切地说是一个意见作为答案),但我会让它滑落。 :)
我之所以说第一种方法是"不良做法"或者模糊不清,正如Phillip Mills正确地说的那样,你基本上是对xib进行假设,并且潜在的负担超过了你的必要。第二种方法适用于特别属于ViewController类的xib(如果名称适合,您甚至不必指定,至少在Objective-C等效项中)。因此,xib是初始化器的参数。
第一种方法需要更长的路线。它加载一个笔尖(也可能包括其中的任何其他对象)。然后假设它顶层的第一个对象是你想要的视图控制器。你的故事板中有一个意外的拖累,你会因为出乎意料的行为而兴奋起来。您还省略了owner参数,该参数可能会或可能不会产生影响,具体取决于您的操作。
一般来说,第一种方法是使用一种方法,它更适用于作为多个对象(不一定是视图控制器)的容器的xib,而第二种方法是通常的方法(或者& #34;最佳实践")在加载视图控制器及其关联的xib文件时。
你可以走第一条路线,但这基本上是徒步穿袜子,imo。它有效,但人们会以一种奇怪的方式看着你......