Обновление Live Interface Builder с @IBDesignable для пользовательского элемента управления NSSlider - PullRequest
2 голосов
/ 23 мая 2019

У меня проблемы с получением пользовательского элемента управления NSSlider , обновленного в реальном времени в Интерфейсном Разработчике XCode.

Я реализовал @IBDesignable и prepareForInterfaceBuilder, как показано во многих других постах и ​​руководствах. Мой маленький тест просто удаляет ручку из ползунка управления. Вот код, который я использую в данный момент:

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
    }
}

Предварительный просмотр в Интерфейсном Разработчике не удаляет ни ручку, ни обновление floatValue: enter image description here

enter image description here

У вас есть идеи, почему это так?

...