这是我第一次使用自定义 View ,我很困惑如何继续。
我有一个自定义 View ,继承自 NSView
,上面只有 3 个内容:一个 ImageView 和 2 个文本字段:
// MyCustomView.swift
import Cocoa
@IBDesignable class MyCustomView: NSView {
@IBOutlet weak var imageView: NSImageView!
@IBOutlet weak var titleField: NSTextField!
@IBOutlet weak var subtitleField: NSTextField!
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
}
}
我添加了一个 XIB 文件,设计了 View 并连接了所有 socket :
现在我的主 Storyboard添加了一个通用 View ,将其类更改为 MyCustomView
并连接了 socket 。这是 ViewController.swift
的代码:
// ViewController.swift
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var customView: MyCustomView!
override func viewDidLoad() {
super.viewDidLoad()
customView.titleField.stringValue = "This is a title"
}
}
在运行时,我在 customeView.titleField.stringValue = ...
行上遇到了 fatal error :
fatal error: unexpectedly found nil while unwrapping an Optional value
如果我删除该行,应用程序会编译,但自定义 View 为空白。
所以我猜我的自定义设计没有继承自 MyCustomView.xib
?我该如何纠正这个问题?我仔细检查了一下,所有 socket 都连接在 IB 中。
最佳答案
- 您的类是否在 UIView
MyCustomView
的身份检查器中? IBOutlet
链接是否正确设置为MyCustomView
? (你的 Storyboard一侧)- XIB 的文件所有者是否设置为
MyCustomView
? - 您有
MyCustomView
的初始化程序吗? (覆盖 init(frame: CGRect) 或必需的 init?(coder aDecoder: NSCoder) )
关于swift - 在 Interface Builder 中设计自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45526906/