Macos 如何不突出显示NSB按钮';单击时是否显示模板图像?

Macos 如何不突出显示NSB按钮';单击时是否显示模板图像?,macos,cocoa,nswindow,nsbutton,Macos,Cocoa,Nswindow,Nsbutton,我在NSTableView的每一行中都有NSButtons 按钮图像在IB中设置,为带alpha通道的黑色图标: 通过以下方式将窗口设置为暗模式: window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark) window?.appearance = nil 并在以下情况下切换至正常模式: window?.appearance = NSAppearance(named: NSAppearanceNameVibra

我在NSTableView的每一行中都有NSButtons

按钮图像在IB中设置,为带alpha通道的黑色图标:

通过以下方式将窗口设置为暗模式:

window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
window?.appearance = nil
并在以下情况下切换至正常模式:

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中的按钮如下所示:

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

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

好:

单击,不确定:

再次点击变黑的按钮会使它再次变白

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

我以为这是因为“瞬时更改”类型,但使用其他“瞬时”类型不会更改任何内容,而且我也无法将该类型设置为“自定义”(IB拒绝)

请注意,这些模板图像在macOS 10.11中的行为与macOS 10.12不同。在塞拉山可以无缝工作的设置组合在埃尔卡皮坦不起作用。这也是我设置悬赏的原因:我需要两个系统的解决方案。如果没有解决方案,并且你知道原因,那么你的解释也是可以接受的答案


(*)在模板图像工作的Sierra上有一个解决方法,可以使用
use button.cell?.setCellAttribute(.cellllightsbycontents,to:0)
在单击时阻止按钮更改颜色(尽管仍有短暂的闪烁)。但是在El Capitan中,按钮在黑暗模式下是黑色的,所以这不适用。

可能是一个可能的解决方案:?@Larme谢谢,但不幸的是这是关于常规按钮的背景色,我的问题是关于按钮的模板图像(我的按钮没有背景)。你说“我强制按钮为“模板”类型”“”没有名为“模板”的按钮样式或类型。编辑你的问题,在IB中包含按钮属性的屏幕截图(如果你是在xib或故事板中创建的),或者包含创建按钮的代码。注意:不要为我浪费时间,在这个版本的应用程序中,我只会使用两组图标,一个黑色的和一个白色的,忘记模板的事情。我刚刚进行了测试,它解决了两个操作系统版本的所有问题。非常感谢你的帮助。:)@Moritz嘿,诚实地说,我以前玩过它,但这个模板从来没有像预期的那样工作:(,每次我碰到这个问题,我就放了两组明暗模式的图像-我认为在El Capitan之前,它工作正常,但El Capitan完全崩溃了-值得为苹果发射一个bug雷达。