禁用没有灰色图像的 NSButton

Disable NSButton without grayed image

我想禁用 NSButton 的用户交互。唯一可能的选择似乎是将 isEnabled 设置为 false:

button.isEnabled = false

...但问题是它为我的按钮图像提供了白色阴影。有什么办法可以去掉那个阴影吗?

一个选项不是禁用它,而是让它触发并在代码中相应地处理它。例如在禁用条件适用时什么也不做。

正如this answer所说,为hitTest(_:)覆盖NSButton和return nil。

如果要切换是否启用用户交互,请创建自定义变量,如果要启用按钮,请创建自定义变量 return super.hitTest(point)

class CustomButton: NSButton {
    var isUserInteractionEnabled = true

    override func hitTest(_ point: NSPoint) -> NSView? {
        return isUserInteractionEnabled ? super.hitTest(point) : nil
    }
}

你必须设置对应纽扣电池的imageDimsWhenDisabled 属性:

button.isEnabled = false
if let cell = button.cell as? NSButtonCell {
    cell.imageDimsWhenDisabled = false
}