aya*_*aio 10 macos cocoa nswindow nsbutton
我在NSTableView的每一行都有NSButtons.
按钮图像在IB中设置,是带alpha通道的黑色图标:
窗口设置为暗模式:
window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
Run Code Online (Sandbox Code Playgroud)
并进入正常模式:
window?.appearance = nil
Run Code Online (Sandbox Code Playgroud)
目标是窗口为白色时按钮应为黑色,窗口较暗时应为白色,单击时不改变.
在暗模式下,为了实现颜色变化,我在NSTableCellView子类中将按钮的图像"template"属性设置为true:
public override func awakeFromNib() {
if darkMode {
button.image?.isTemplate = true
} else {
button.image?.isTemplate = false
}
}
Run Code Online (Sandbox Code Playgroud)
IB中的按钮是这样制作的:
这在macOS 10.12 Sierra中运行良好:当窗口为白色时,单击黑色按钮不会改变其外观,这是完美的.
但是当窗口很暗时,点击白色按钮使其变黑,这在我的情况下是不可接受的(*).此外,模板图像在macOS 10.11 El Capitan中不起作用.
好:
点击,不行:
然后再次点击黑色按钮使其再次变白......
我的问题是:如何在单击时强制NSButton不突出显示模板图像?
我认为这是因为"瞬间变化"类型,但使用其他"瞬间"类型并没有改变任何东西,我也不能将类型设置为"自定义"(IB拒绝).
请注意,与macOS 10.12相比,这些模板图像在macOS 10.11中的行为有所不同.在Sierra中无缝工作的设置组合在El Capitan中不起作用.这也是我设置奖金的原因:我需要两个系统的解决方案.如果没有解决方案并且您知道原因,那么您的解释也是可以接受的答案.
(*)在模板图像工作的Sierra上可以使用一种解决方法,用于在use button.cell?.setCellAttribute(.cellLightsByContents, to: 0)单击时停止按钮更改颜色(尽管仍有短暂的闪光).但是在El Capitan中,按钮在黑暗模式下是黑色的,所以这不适用.