Создать палитру Interface Builder для exposeBinding - PullRequest
0 голосов
/ 20 января 2019

Я следовал своему пониманию того, как открыть свойство подкласса 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.

Поэтому я думаю, что важный момент заключается в том, как мнесоздать «Палитра Интерфейсного Разработчика»

...