创建暴露生成器的Interface Builder面板

时间:2019-01-19 22:51:00

标签: swift interface-builder cocoa-bindings nsslider

我了解了如何在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面板”

0 个答案:

没有答案