我正在尝试开发自己的NSControl,其原因非常复杂,但为恢复起见,我希望我自己的控件在许多应用程序中可以与Web服务器交互,而不必一遍又一遍地重写相同的库。
但是,如果我的原因很复杂,我想我的问题并不那么复杂。该控件非常简单:它需要绘制具有白色背景和已定义高度的视图。
我的代码是:
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,则该视图的设计正确: a simple custom view
如果我将自定义视图子类化为myTextfield,则背景是透明的,并且无论height属性的值如何,设计都不会改变。
No change when height property is changed
当我构建并运行项目时,myTextfield会正确显示。 我错过了什么?