问题描述
我正在尝试通过情节提要中的一个开关来更新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
}
}
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)
}
}
}
,
对于按钮中的设置图像,您应该使用
yourButton.setImage(image,forState: .Normal)