禁用NSButton而不显示灰色图像

时间:2018-04-20 16:32:54

标签: swift macos nsbutton

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

button.isEnabled = false

...但问题是它给我的按钮图像留下了白色阴影。有没有办法摆脱那种阴影?

3 个答案:

答案 0 :(得分:1)

您必须设置相应按钮单元格的imageDimsWhenDisabled属性:

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

答案 1 :(得分:0)

一个选项不是禁用它,而是可以让它在代码中触发并相应地处理它。例如在禁用条件时不执行任何操作。

答案 2 :(得分:0)

正如this answer所述,覆盖NSButton并为hitTest(_:)返回nil。

如果您想切换是否启用了用户互动,请创建自定义变量并返回super.hitTest(point),如果您希望启用该按钮。

class CustomButton: NSButton {
    var isUserInteractionEnabled = true

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