切换到mojave后,我试图在模式改变时调整菜单图标 . 我的应用程序:“应用程序是代理(UIElement)”最初没有窗口 .
目前我使用的NSMenuDelegate函数 menuWillOpen 到目前为止工作但是用户必须打开菜单才能更改图标 .
我想知道是否有办法检测外观是否已经改变而不打开菜单 . 我已经尝试过NSApplicationDelegate中的applicationDidChangeScreenParameters但没有成功 .
//这来自NSMenuDelegate
- (void)menuWillOpen:(NSMenu *)menu {
[self adaptToDarkMode];
}
//这会处理菜单图标的变化
- (void) adaptMenuIcon {
BOOL darkModeFlag = [self psGetDarkMode];
NSString *iconName = @"MenuIconBlack";
if(darkModeFlag) {
iconName = @"MenuIconWhite";
}
NSString *filePath = [self psBundlePathToFolder:@""];
NSString *finalPath = [NSString stringWithFormat:@"%@%@.png", filePath, iconName];
NSImage *image = [[NSImage alloc] initWithContentsOfFile:finalPath];
pathToMenuIcons = [self psBundlePathToFolder:@"MenuIcons"];
[statusItem setMenu:statusMenu];
[statusItem setTitle:@"➜"];
[statusItem setImage: image];
[statusItem setHighlightMode:YES];
}
1 回答
您可以阅读全局首选项:
这将在暗模式下返回
Dark
.你也可以用
NSDistributedNotificationCenter