IB中的子类别NSControl属性

时间:2018-09-19 12:38:06

标签: swift xcode interface-builder nscontrol

我正在尝试开发自己的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属性的值如何,设计都不会改变。

subclassed custom View

No change when height property is changed

当我构建并运行项目时,myTextfield会正确显示。 我错过了什么?

0 个答案:

没有答案