ios - UIView subview 的元素不可访问

标签 ios swift uiview

我有一个普通的 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/

相关文章:

ios - 在 Swift 4 中自定义 UISearchBar

iOS:外部显示器 AVPlayerController 关闭问题

ios - 当 UIView 从它的 superView 分离时如何得到通知?

objective-c - UIViewController 未调用 viewDidLoad 且未创建 UIView 导致崩溃

iphone - XMPPFramework 消息未发送

iphone - 如果 Mac 中有多个同名的 XCode 项目,如何找到当前正在运行的 XCode 项目的位置?

objective-c - 从 subview 中更改 View

ios - 在 iOS 库中重命名类的最佳方法是什么?

ios - UIImagePickerController 相机无法快速工作

iphone - 如何推送 ViewController 并让第一个 Controller 部分可见?