【问题标题】:Instantiating a UIViewController directly from a xib file which is better?直接从 xib 文件实例化 UIViewController 哪个更好?
【发布时间】:2016-12-15 11:04:42
【问题描述】:

我正在做一个项目,我使用的是 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 直接放在那里一样,第二个具有以视图控制器为所有者的视图。

【问题讨论】:

  • 意见:选项 1 更灵活也更晦涩。如果我在代码中看到它,我会担心出现了哪些异常情况。

标签: ios swift uiviewcontroller xib


【解决方案1】:

这是一个基于意见的问题(或者更确切地说是要求一个意见作为答案),但我会顺其自然。 :)

我之所以说第一种方法是“不好的做法”或晦涩难懂,正如 Phillip Mills 正确所说的那样)是因为您基本上是在对 xib 做出假设,并且可能会加载比您必须的更多。第二种方法适用于专门属于您的 ViewController 类的 xib(如果名称合适,您甚至不必指定它,至少在 Objective-C 等效项中)。因此 xib 是初始化程序的参数。

第一种方法需要更长的路线。它加载了一个笔尖(也可能包括其中的任何其他对象)。然后您假设其顶层的第一个对象是您想要的视图控制器。一个意外拖入你的故事板,你会因为意想不到的行为而扬眉吐气。此外,您还省略了 owner 参数,这可能会或可能不会产生后果,具体取决于您的操作。

一般来说,第一种方法更适用于作为多个对象容器的 xib(不一定是视图控制器),而第二种方法是常用的方法(或“最佳实践”)加载带有相关 xib 文件的视图控制器时。

你可以走第一条路线,但这基本上是穿着袜子远足,imo。它有效,但人们会以一种奇怪的方式看着你......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多