我按照我对如何在 Interface Builder 中公开 NSSlider 子类的属性的理解,但它没有显示出来。我希望能够通过 Interface Builder 将属性绑定到视图控制器中,以更好地跟踪滑块的移动。
这是子类
@objc class GJSlider: NSSlider {
@objc dynamic var sliderMouseEnd: Bool = false
override var exposedBindings: [NSBindingName] {
get {
var temp = super.exposedBindings
temp.append(NSBindingName(rawValue: "sliderMouseEnd"))
return temp
}
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
GJSlider.exposeBinding(NSBindingName(rawValue: "sliderMouseEnd"))
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override class func valueClassForBinding(_ binding: NSBindingName) -> AnyClass? {
if binding == NSBindingName(rawValue: "sliderMouseEnd") {
return Optional<Bool>.self as! AnyClass
} else {
return super.valueClassForBinding(binding)
}
}
}
在查看了更多文档后, NSKeyValueBindingCreation 说:
NSView 子类可以通过为每个属性调用类方法exposeBinding(_:) 将额外的key-value-coding/key-value-observing 兼容属性公开为绑定。这通常在类的初始化方法中完成。通过公开对象支持的绑定并创建Interface Builder 调色板,您可以使您自己的类的实例在 Interface Builder 中可绑定。
所以我想重点是如何创建“界面生成器调色板”