我了解了如何在Interface Builder中公开NSSlider子类的属性,但是没有显示出来。我希望能够通过Interface Builder在ViewController中绑定该属性,以更好地跟踪滑块的运动。
这是子类
@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子类可以通过为每个属性调用类方法ExposureBinding(_ :)来将其他符合键值编码/键值观察的兼容属性公开为绑定。这通常是在类的initialize方法中完成的。通过公开对象支持的绑定并创建 Interface Builder面板,您可以使自己的类的实例在Interface Builder中可绑定。
所以我想最重要的是如何创建“ Interface Builder面板”