didSet 不更新 NSImage

didSet not updating NSImage

我正在尝试通过情节提要中的切换来更新 NSButton(Image) 的图像。 NSButton 图像并没有改变。

这是我的 ViewController IBAction 代码:

    @IBAction func ButtonState(_ sender: NSSwitch) {
    let stateOfButton = sender.state
    if (stateOfButton.rawValue == 1){
        testButton.isEnabled = true

    
    }
    else{
        testButton.isEnabled = false

    }
}

这里是我的 NSButton Class 的一个片段,经过修改:

override var isEnabled: Bool{
    didSet{
        if(self.isEnabled){
            self.image = NSImage(named: "TestEnabled")
            print("TestEnable")
        }
        else{
            self.image = NSImage(named: "TestDisabled")
            self.state = NSControl.StateValue(rawValue: 0)
            print("NoEnable")
        }
        
    }

打印语句在切换开关时执行,但图像没有改变。

要在按钮中设置图像,您应该使用那个

yourButton.setImage(image, forState: .Normal)

请仔细检查两个命名图像是否存在。下面是你的代码的一个美化版本,它按预期工作:

class ViewController: NSViewController {
    @IBOutlet weak var button: MyButton!
    
    @IBAction func switchClicked(_ sender: NSSwitch) {
        button.isEnabled = sender.state == .on
    }
}

class MyButton: NSButton {
    override var isEnabled: Bool {
        didSet {
            image = isEnabled
                ? NSImage(named: NSImage.statusAvailableName)
                : NSImage(named: NSImage.statusUnavailableName)
        }
    }
}