UIView子视图的元素无法访问

时间:2014-12-20 11:27:26

标签: ios swift uiview

我有一个简单的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中指定节的标题视图时,此技术有效。

我错过了什么?

1 个答案:

答案 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