Я пытаюсь разработать свой собственный 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 показывают правильно.Что я пропустил?