UIViewController 子类的便利初始化器,带有来自 nib 的实例?
Posted
技术标签:
【中文标题】UIViewController 子类的便利初始化器,带有来自 nib 的实例?【英文标题】:Convenience initialiser for UIViewController subclass with instance from nib? 【发布时间】:2015-10-06 10:53:01 【问题描述】:我正在尝试初始化一个名为 TestController
的 UIViewController
的子类。我有这个快速课程:
class TestController : UIViewController
let testString : String
@IBOutlet weak var test: UITextField!
required init(withString string: String)
self.testString = string
super.init(nibName: nil, bundle: nil)
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
我还有一个名为 TestController
的 nib 文件,
里面是UIViewController
的一个实例。该文件的所有者为无(灰色的 NSObject),并且设计器中的 UIViewController 实例的类在身份检查器中设置为 TestController。有一个UITextField
实例作为出口。
问题是控制器没有从笔尖初始化(我认为),并且 textField 出口为零。
我的目标是允许通过自定义初始化程序以编程方式从 nib 初始化控制器实例。我究竟做错了什么?
【问题讨论】:
【参考方案1】:您有两个问题:首先,您的 nib(或 xib)没有正确创建(您不应该在界面生成器中看到 TestController
)。解决这个问题的最简单方法是重新创建它:New File->Cocoa Touch Class->Create Subclass of UIViewController
,别忘了勾选Also Create a XIB file
第二个问题是您没有指定要加载的 nib。您应该在初始化器的nibName
参数中指定它:
super.init(nibName: "NewlyCreatedXib", bundle: nil)
当您解决这两个问题时,我相信您的代码会正常工作。
【讨论】:
以上是关于UIViewController 子类的便利初始化器,带有来自 nib 的实例?的主要内容,如果未能解决你的问题,请参考以下文章
UIViewController 的子类在调用 super 之前可以在 viewDidLoad 中进行一些初始化吗?