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”中构建错误