如何从XIB文件实例化视图
如前一篇文章中所述,在进行团队开发时,故事板可能不是最佳解决方案。 但是如果没有情节提要,您如何实例化视图? 这是我将在本文中讨论的主题。
如何从XIB文件实例化视图
- 创建一个“ Xibview.swift”文件。 这将是一个便利类,能够从xib文件创建视图。 从现在开始我们创建的每个UIView都将实现“ Xibview”。
- “ initViewFromName”负责创建视图。 它会…
- 接收一个UIView类,并提取其类名。
- 从类名生成一个笔尖。
- 从笔尖实例化视图。
- 对于那些想知道笔尖/ XIB有何不同的人,它们在功能上是相同的。 笔尖是二进制文件,而xibs是xml格式,因此在集成诸如GitHub之类的版本管理系统时,xibs是首选。
- 创建一个xxxView.swift,它将是您的xib文件的文件所有者(我们将在下一步中创建)。 类名无关紧要,但是请确保它继承了XibView,即我们上面刚刚创建的类。
- 创建一个xib文件。 将我们在上面创建的类指定为文件的所有者。 该文件的所有者(通常)是用于在运行时访问xib文件的类。 更改背景颜色可能是一个好主意,以便您知道何时正确显示视图
- 意识到! 确保“ xib文件”和“类名”具有相同的名称。 为什么? 因为XibView(我们创建的)只能从其类名实例化xib文件。
准备完毕!
- 就这样! XibView将处理所有实例化并将全尺寸视图添加到ViewController。 以下是如何创建此视图的示例:
- 初始化此ViewController时,还将初始化我们创建的视图。 视图初始化器不是用类本身编写的,因此XibView会处理它。
- 通过在loadView()中设置self.view,我们告诉ViewController要显示哪个视图。
一些陷阱
从xib创建视图时有一些陷阱。 例如…
这是一个坏主意。 你能猜出为什么吗?
好吧,让我们看看如果运行该程序会发生什么。
EXC_BAD_ACCESS…。 这并没有多大帮助,但请看一下堆栈跟踪。 我们有一个整齐的无限循环!
当为“视图”本身(而不是文件的所有者)分配了自定义视图类时,将在每个xib实例化时调用自定义视图类中的初始化代码。
但是在初始化代码中,我们正在从xib实例化一个新视图。
实例化此xib时,将调用我们自定义视图的init代码。
但是在初始化代码中,我们正在从xib实例化一个新视图。
实例化此xib时,将调用我们自定义视图的init代码。
但是在初始化代码中……。 你得到其余的。
摘要
在本文中,我解释了
- 如何从xib文件创建视图
- 如何将全尺寸视图附加到ViewController
- 一些陷阱