使用自定义NSSlider控件的@IBDesignable更新Live Interface Builder

时间:2019-05-23 07:01:49

标签: swift xcode cocoa appkit

我无法在Xcode的Interface Builder中实时更新自定义的 NSSlider 控件。

我已经实现了@IBDesignableprepareForInterfaceBuilder,如许多其他文章和教程中所示。我的小测试只是从滑块控件上卸下了旋钮。 这是我目前正在使用的代码:

import Cocoa


@IBDesignable
class ColorSlider2: NSSlider {
    override func setNeedsDisplay(_ invalidRect: NSRect) {
        super.setNeedsDisplay(invalidRect)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        setupView()
    }


    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        setupView()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
    }

    private func setupView() {
        if ((self.cell?.isKind(of: ColorSlider2Cell.self)) == false) {
            let cell = ColorSlider2Cell()
            self.cell = cell
        }
        self.alphaValue = 0.5
        self.floatValue = 0.4
    }
}



class ColorSlider2Cell: NSSliderCell {
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init() {
        super.init()
    }

    override func drawKnob(_ knobRect: NSRect) {
        return
    }
}

Interface Builder中的预览既不删除旋钮也不更新floatValue: enter image description here

enter image description here

你知道为什么会这样吗?

0 个答案:

没有答案