【问题标题】:Disable NSButton without grayed image禁用没有灰色图像的 NSButton
【发布时间】:2018-04-20 16:32:54
【问题描述】:

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

button.isEnabled = false

...但问题是它给我的按钮图像提供了白色阴影。有什么办法可以摆脱这种阴影?

【问题讨论】:

    标签: swift macos nsbutton


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。它达到了目的。
    【解决方案2】:

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

    【讨论】:

    • 有多个按钮重叠。我需要禁用一种类型的按钮,否则它会吃掉后面按钮的触摸事件。做不到。
    【解决方案3】:

    正如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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      相关资源
      最近更新 更多