我在NSTableView中有NSButtons,就像我的other question here一样。
我在"暗模式"之间实现了切换。和"正常模式"在NSWindowController的窗口上使用NSAppearance:
override public func windowDidLoad() {
if darkModeOn {
setDarkMode()
} else {
setLightMode()
}
}
func setDarkMode() {
window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
window?.backgroundColor = nil
}
func setLightMode() {
window?.appearance = nil
window?.backgroundColor = .white
}
按钮的isTemplate
属性为true
,因此它们的颜色与窗口的颜色相反。
灯:
黑暗:
当应用程序启动时,此功能正常:当窗口为白色时按钮为黑色,当窗口为黑色时按钮为白色。
但是,当应用已经推出时,这不再适用。
应用程序启动后,如果我在窗口为白色时调用setDarkMode()
,我会突然得到黑色或灰色按钮,而不是所需的白色按钮。
如果我在窗户黑暗时调用setLightMode()
,则相同。
在这两种情况下,一旦我来回滚动tableView足以强制重绘单元格,按钮就会恢复正常。
注意切换窗口状态的另一个副作用:某些tableView的行分隔符突然变粗,并且在滚动后也会再次变为正常。 < / p>
您可以想象,我不希望用户被迫退出应用并重新启动,因此我希望在NSAppearance更改时在窗口中正确绘制所有这些内容。
不幸的是,我已经尝试了许多解决方案而没有成功:needsDisplay
和其他强制方式的组合&#34;刷新&#34;按钮(和tableView行分隔符)没有任何效果。文档很稀疏。我观看了所有WWDC视频。我输了。 :P