首页 > 解决方案 > 从自定义类创建的 NSTextField 随机出现

问题描述

我有一个主 NSView 和 2 个 NSView 子视图,每个子视图都包含一个自定义 NSButton(全部在 Interface Builder 中创建)。我的自定义按钮类以编程方式在按钮下方创建一个 NSTextField,方法是从超级视图添加它: 在此处输入图像描述

以及自定义的 NSButton 类代码:

class buttonUpDown: NSButton {
    var myLabel:NSTextField!
    
    required public init?(coder: NSCoder) {
        super.init(coder: coder)
        let labelWidth=CGFloat(90)

        print("init")
        superview?.autoresizesSubviews = false
        myLabel = NSTextField(frame: NSMakeRect(frame.origin.x+frame.size.width/2-labelWidth/2,frame.origin.y-20,labelWidth,16))
        
        myLabel?.stringValue = "Mesh Quality"
        myLabel.alignment = .center
        myLabel.font? = .systemFont(ofSize: 8)

        myLabel.backgroundColor = .red
        myLabel.isBordered = false
        myLabel.isEditable = false

        superview!.addSubview(myLabel)
    }
}

当我有一个引用该类的 Button 时,标签会正确显示。 在此处输入图像描述

但是当我有 2 个时,只有 1 个标签随机出现在左侧或右侧: 在此处输入图像描述

我错过了在每个按钮下方显示的文本?

标签: swiftsubclassnsviewnstextfieldnsbutton

解决方案


发现问题。在 init 函数中创建标签会导致视图框架的定位不稳定。从绘图函数中添加它们,使其更可靠。


推荐阅读