我的应用程序在Mac Os Mojave中存在一些UI问题。当我切换到黑暗模式时,一些标签和按钮的文本内容不可见,因此我使用以下代码进行了一项工作。
var interfaceStyle = NSUserDefaults.StandardUserDefaults.StringForKey("AppleInterfaceStyle");
if (interfaceStyle == "Dark") {
label.textcolor = NSColor.White;
}
这可以解决问题,但是如果我在应用程序之间切换到亮模式,则使用的标签颜色不会更改。我需要重新启动应用程序以读取代码并以默认颜色显示标签。
有人可以面对这个问题吗?用户更改Mac Os Mojave的外观模式(深色和浅色)时,是否会击中任何委托方法?
答案 0 :(得分:1)
您可以使用KVO
来跟踪主题更改(AppleInterfaceThemeChangedNotification
)。
readonly NSString themeKeyString = new NSString("AppleInterfaceThemeChangedNotification");
readonly NSString dark = new NSString("Dark");
readonly Selector modeSelector = new Selector("themeChanged:");
[Export("themeChanged:")]
public void ThemeChanged(NSObject change)
{
var interfaceStyle = NSUserDefaults.StandardUserDefaults.StringForKey("AppleInterfaceStyle");
if (interfaceStyle == "Dark")
{
Console.WriteLine("Now Dark");
}
else
{
Console.WriteLine("Now not Dark");
}
}
NSDistributedNotificationCenter.GetDefaultCenter().AddObserver(this, modeSelector, themeKeyString, null);
注意:我通常在AppDelegate.DidFinishLaunching
NSDistributedNotificationCenter.GetDefaultCenter().RemoveObserver(this, themeKeyString);
顺便说一句:NSDistributedNotificationCenter.DefaultCenter.AddObserver
帮助程序/重载在这种情况下无法正常工作...