我有一个普通的 UIViewController 类。在 View 的顶部,我有一个 subview ,它设置为名为 HeaderView 的自定义类。我尝试使用 XIB 来定义该自定义 View 的元素,并在 Controller 加载时将其加载,如下所示:
@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 中描述的 View 在显示主视图时可见。但是,当我尝试访问 subview 内的元素时,应用程序崩溃了。
override func viewDidAppear(animated: Bool) {
headerView.headerLabel.text = "Success!" // Crash here
}
此处的示例项目:https://github.com/AaronBratcher/ViewTester
此技术在指定 UITableView 中某个部分的标题 View 时有效。
我错过了什么?
最佳答案
if let view = NSBundle.mainBundle().loadNibNamed("HeaderView", owner: self, options: nil)[0] as? HeaderView {
self.headerView.addSubview(view)
}
在这段代码中,您将向 nil HeaderView
属性添加一个 subview 。这是不正确的。您需要实例化 HeaderView
对象并将其分配给您的属性,方法如下:
self.headerView = NSBundle.mainBundle().loadNibNamed("HeaderView", owner: self, options: nil)[0] as? HeaderView
关于ios - UIView subview 的元素不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27579734/