如何在不将 nib 名称指定为字符串的情况下使用 nib 加载 View Controller 子类?

Posted

技术标签:

【中文标题】如何在不将 nib 名称指定为字符串的情况下使用 nib 加载 View Controller 子类?【英文标题】:How to load a View Controller SubClass with a nib without specifying the nib name as a string? 【发布时间】:2016-01-26 17:39:27 【问题描述】:

当您以编程方式加载 UIViewController 子类时,如果您将任何文件命名为与子类不同的名称,则不会加载与该 ViewController 关联的任何 nib。

在不将字符串名称传递给初始化程序的情况下自动加载 nib 的唯一方法是确保您的 x.nibclass.swiftSubClass 具有相同的名称。

有没有办法解决这个问题?

【问题讨论】:

【参考方案1】:

根据文档,您实际上可以加载基于 nib 的视图控制器,而无需将其命名为完全相同的东西。尽管匹配名称是最常用的方法,但还有第二种情况,即使在 Swift 中也可以使用。

来自the documentation:

如果你使用一个 nib 文件来存储你的视图控制器的视图,它是 建议您在以下情况下明确指定该 nib 文件 初始化你的视图控制器。

但是,如果您不指定 nib 名称,并且不要覆盖自定义中的 loadView 方法 子类,视图控制器使用其他方法搜索 nib 文件 方法。具体来说,它会查找具有适当名称的 nib 文件 (没有 .nib 扩展名)并在其视图时加载该 nib 文件 被要求。具体来说,它会(按顺序)查找 nib 文件 以下名称之一:

    如果视图控制器类名称以单词“Controller”结尾,如在 MyViewController 中,它会查找名称与 不带“Controller”一词的类名,如 MyView.nib。

    它查找名称与视图控制器类的名称匹配的 nib 文件。例如,如果类名是 MyViewController, 它会查找 MyViewController.nib 文件。

【讨论】:

我可以确认一下,你可以随意命名类文件。只要类和 Nib 符合这些条件。【参考方案2】:

只有当 nib 和 class-file 与 class 名称相同时,nib 才会自动加载...

【讨论】:

以上是关于如何在不将 nib 名称指定为字符串的情况下使用 nib 加载 View Controller 子类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将其注册为机器人的情况下创建不和谐机器人?

如何在不将 LocalDateTime 字段转换为扩展的 json 对象的情况下将 java 对象转换为简单的 json 字符串?

如何在不将空值发送到输出数组的情况下拆分字符串

如何在不“连接”它们的情况下以编程方式访问 NIB 中的 UI 元素?

如何在不将页面滚动条重置为顶部的情况下使用 jQuery 为固定 div 设置动画

如何在不将文件写入光盘的情况下创建文件并压缩它们?