单击时如何不突出显示NSButton的模板图像?

时间:2017-05-22 12:25:56

标签: macos cocoa nswindow nsbutton

我在NSTableView的每一行都有NSButtons。

按钮图像在IB中设置,并且是带有Alpha通道的黑色图标:

enter image description here

窗口设置为暗模式:

window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)

以正常模式:

window?.appearance = nil

目标是窗口为白色时按钮应为黑色,窗口较暗时应为白色,点击时不更改。

在黑暗模式下,为了实现颜色变化,我设置了按钮的图像"模板"在NSTableCellView子类中将属性设置为true:

public override func awakeFromNib() {
    if darkMode {
        button.image?.isTemplate = true
    } else {
        button.image?.isTemplate = false
    }
} 

按钮在IB中制作如下:

enter image description here

这在macOS 10.12 Sierra中运行良好:当窗口为白色时,单击黑色按钮不会改变其外观,这是完美的。

但是当窗口很暗时,点击白色按钮会使其变黑,这在我的情况下是不可接受的(*)。此外,模板图像在macOS 10.11 El Capitan中不起作用。

确定:

enter image description here

点击,不行:

enter image description here

然后再次点击黑色按钮使其再次变白......

我的问题是:如何在单击时强制NSButton不突出显示模板图像?

我认为这是因为"瞬间变化"键入但使用另一个"瞬间"那些没有改变的东西,我不能将类型设置为" custom"要么(IB拒绝)。

请注意,与macOS 10.12相比,这些模板图像在macOS 10.11中的行为有所不同。在Sierra中无缝工作的设置组合不适用于El Capitan。这也是我设置奖金的原因:我需要两个系统的解决方案。如果没有解决方案并且您知道原因,那么您的解释也是可以接受的答案。

(*)在模板图像工作的Sierra上可以使用一种解决方法,通过使用use button.cell?.setCellAttribute(.cellLightsByContents, to: 0)来阻止按钮在点击时明确地改变颜色(虽然它仍然是短暂的闪光)。但是在El Capitan中,按钮在黑暗模式下是黑色的,所以这并不适用。

0 个答案:

没有答案