Я следовал своему пониманию того, как открыть свойство подкласса NSSlider в Интерфейсном Разработчике, но оно не отображается.Я хочу иметь возможность привязывать свойство в viewcontroller через 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 могут выставлять дополнительные совместимые свойства key-value-coding / key-value-наблюдающие как привязки, вызывая метод класса exposeBinding (_ :) для каждого из свойств.Обычно это делается в методе инициализации класса.Выставив привязки, которые поддерживает объект, и создав палитру Interface Builder , вы можете сделать экземпляры ваших собственных классов связанными в Interface Builder.
Поэтому я думаю, что важный момент заключается в том, как мнесоздать «Палитра Интерфейсного Разработчика»