iOS Swift 子类化 ViewController 由 xib (nib) 文件初始化

Posted

技术标签:

【中文标题】iOS Swift 子类化 ViewController 由 xib (nib) 文件初始化【英文标题】:iOS Swift subclassing ViewController initialized by xib (nib) file 【发布时间】:2016-04-05 07:36:37 【问题描述】:

我有一个基类

MyViewController: UIViewController

由 MyViewController.xib 用一些插座初始化。我只将 MyViewController.xib 中的 File Owner 类设置为 MyViewController,MyViewController.swift 中没有任何 init 方法(全部继承自 UIViewController),以下行按预期工作:

let vc = MyViewController()

视图属性已设置,网点已设置。

我希望继承MyViewController

SecondViewController: MyViewController

    override init()
    
        super.init()
    

    required init?(coder aDecoder: NSCoder)
    
        super.init(coder: aDecoder)
    

现在我期待那行

let vc = SecondViewController()

将创建视图控制器,其视图和出口继承自MyViewController,但 vc 中的所有出口都是 nil。看起来 MyViewController.xib 文件现在丢失了。我做错了什么?

【问题讨论】:

***.com/questions/27336730/… 【参考方案1】:

您不能扩展 xib 文件。 SecondViewController应该有自己的xib文件和自己的出口。您可以在基类MyViewController 中定义通用 UI 组件,并且对于您创建的每个 xib,将 ui 组件直接链接到基类。 例如,如果您在所有视图控制器中都有一个通用的自定义后退按钮,请在基类中添加出口定义,并为每个 xib 文件添加UIButton 并将其出口设置为基类。

【讨论】:

感谢您的回答。可怜听这话。我相信子类系统的存在不是为了在每个子类中设置相同的设置(如果 100 个具有相同基础 UI 的子类怎么办?我不想制作 100 个相同的 xib 文件)。可能我不了解 xib 的 init 内部厨师,但现在我只看到一个好的解决方案 - 在 MyViewController 中的代码中制作所有基本 UI,而不是在 xib 中。 在这种情况下是的,您可以在基类的代码中手动创建常见的 UI 内容,或者您​​可以在独立的 xib 文件中为不同的 UIViewController 创建并实例化并将其添加为子视图

以上是关于iOS Swift 子类化 ViewController 由 xib (nib) 文件初始化的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 子类化 ViewController 由 xib (nib) 文件初始化

iOS 图表子类 Markerview 使用 Swift 总是在“xxx-Swift.h”中构建错误

iOS 图表子类 Markerview 使用 Swift 总是在“xxx-Swift.h”中构建错误

UIViewController 的 Swift 子类化子类

使用 Swift 子类化 SKShapeNode

子类化 UIAlertController 并遇到运行时错误