我有一个简单的UIViewController类。在视图的顶部,我有一个子视图,设置为一个名为HeaderView的自定义类。我试图使用XIB来定义该自定义视图的元素,并在控制器加载时加载它,如下所示:
@IBOutlet weak var headerView: HeaderView!
override func viewDidLoad() {
super.viewDidLoad()
if let view = NSBundle.mainBundle().loadNibNamed("HeaderView", owner: self, options: nil)[0] as? HeaderView {
self.headerView.addSubview(view)
}
}
这个似乎可以工作,因为在显示主视图时,可以看到XIB中描述的视图。但是,当我尝试访问子视图中的元素时,应用程序崩溃了。
override func viewDidAppear(animated: Bool) {
headerView.headerLabel.text = "Success!" // Crash here
}
此处的示例项目:https://github.com/AaronBratcher/ViewTester
当在UITableView中指定节的标题视图时,此技术有效。
我错过了什么?
答案 0 :(得分:1)
if let view = NSBundle.mainBundle().loadNibNamed("HeaderView", owner: self, options: nil)[0] as? HeaderView {
self.headerView.addSubview(view)
}
在这段代码中,您要为nil HeaderView
属性添加子视图。这是不正确的。您需要实例化HeaderView
对象并将其分配给您的属性,这样:
self.headerView = NSBundle.mainBundle().loadNibNamed("HeaderView", owner: self, options: nil)[0] as? HeaderView