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)
}
}
}
我正在尝试通过情节提要中的切换来更新 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)
}
}
}