如何从XIB文件实例化视图

如前一篇文章中所述,在进行团队开发时,故事板可能不是最佳解决方案。 但是如果没有情节提要,您如何实例化视图? 这是我将在本文中讨论的主题。

如何从XIB文件实例化视图

  • 创建一个“ Xibview.swift”文件。 这将是一个便利类,能够从xib文件创建视图。 从现在开始我们创建的每个UIView都将实现“ Xibview”。
  • “ initViewFromName”负责创建视图。 它会…
  1. 接收一个UIView类,并提取其类名。
  2. 从类名生成一个笔尖。
  3. 从笔尖实例化视图。
  • 对于那些想知道笔尖/ 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
  • 一些陷阱