微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

didSet不更新NSImage

如何解决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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。