didSet不更新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类的摘要,并进行了修改

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")
        }
        
    }

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

解决方法

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

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)
        }
    }
}

Button switch demo

,

对于按钮中的设置图像,您应该使用

yourButton.setImage(image,forState: .Normal)