切换到 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];
}