Подклассы NSControl свойства в IB - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь разработать свой собственный NSControl. Причины этого очень сложны, но, чтобы возобновить, я хочу, чтобы мои собственные элементы управления реагировали с веб-сервером во многих приложениях, без переписывания одних и тех же библиотек снова и снова.

Но если мои причины сложные, я думаю, что мой вопрос не такой сложный.Управление очень простое: необходимо нарисовать вид с белым фоном и определенной высотой.

Мой код:

import Cocoa

@IBDesignable class myTextField: NSControl {
@IBInspectable var height: CGFloat {
    get{
        return frame.size.height
    }
    set (aValue) {

        let aSize = CGSize(width: self.bounds.size.width, height: aValue)
        setFrameSize(aSize)
    }
}


override init(frame frameRect: NSRect) {
    super.init(frame: frameRect)
    height = 30
    _init()
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
    needsLayout = true
    height = 30
    _init()
}

func _init() {
    let aSize = CGSize(width: self.bounds.size.width, height: height)
    setBoundsSize(aSize)
    setFrameSize(aSize)
}

override func prepareForInterfaceBuilder() {
    _init()
    super.prepareForInterfaceBuilder()
    needsDisplay = true
    let aSize = CGSize(width: self.bounds.size.width, height: height)
    setFrameSize(aSize)
}


override func draw(_ dirtyRect: NSRect) {
    Swift.print("bounds \(self.bounds)")
    Swift.print("Frame \(self.frame)")
    var newRect = dirtyRect
    newRect.size.height = height
    super.draw(newRect)

    NSColor.white.setFill()
    newRect.fill()
}

}

Если я поставлюcustomView на моей раскадровке, это представление спроектировано правильно: простое настраиваемое представление

если я подклассирую настраиваемое представление как myTextfield, фон будет прозрачным и независимо от значения свойства height,дизайн не меняется.

пользовательское представление с подклассами

Без изменений при изменении свойства высоты

При сборкеи запустить мой проект, myTextfield показывают правильно.Что я пропустил?

...