首页 文章

尝试将菜单图标调整为莫哈韦黑暗模式

提问于
浏览
1

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

The main Menu

1 回答

  • 0

    您可以阅读全局首选项:

    NSString *appearance = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"];
    

    这将在暗模式下返回 Dark .

    你也可以用 NSDistributedNotificationCenter

    [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(onAppearanceChanged:) name:@"AppleInterfaceThemeChangedNotification" object:nil]
    
    -(void)onAppearanceChanged:(NSNotification *)notificaton
    {
     // read appearance
    }
    

相关问题