Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Xcode(Swift)中读取用户对OSX菜单栏的选择_Swift_Osx Yosemite_Nsstatusitem - Fatal编程技术网

如何在Xcode(Swift)中读取用户对OSX菜单栏的选择

如何在Xcode(Swift)中读取用户对OSX菜单栏的选择,swift,osx-yosemite,nsstatusitem,Swift,Osx Yosemite,Nsstatusitem,我正在swift中为OS X创建代理应用程序(仅在菜单栏中显示应用程序图标)。我正在使用以下命令从AppDelegate加载应用程序的图标: statusItem.image = NSImage(named: "BlackIcon") 而且效果很好 但是,如果用户已从系统首选项->常规选择使用黑色菜单栏,则用户不会看到图标,因为它是黑色的 因此,如果用户选择了该选项,我需要向他们显示不同的“白色图标” 如何从我的应用程序中检查用户是否激活了此选项 您似乎正在尝试反转暗模式下的菜单项图标颜色

我正在swift中为OS X创建代理应用程序(仅在菜单栏中显示应用程序图标)。我正在使用以下命令从AppDelegate加载应用程序的图标:

 statusItem.image = NSImage(named: "BlackIcon")
而且效果很好

但是,如果用户已从系统首选项->常规选择使用黑色菜单栏,则用户不会看到图标,因为它是黑色的

因此,如果用户选择了该选项,我需要向他们显示不同的“白色图标”


如何从我的应用程序中检查用户是否激活了此选项

您似乎正在尝试反转暗模式下的菜单项图标颜色。默认情况下,OSX处理深色模式并反转图像颜色,但是如果尚未添加[image setTemplate:YES],则需要专门添加[image setTemplate:YES]才能完成此操作

目标c:

self.statusItem = [[NSStatusBar systemStatusBar]     
statusItemWithLength:NSSquareStatusItemLength];
NSImage *image = [NSImage imageNamed:@"statusItemIcon"];
[image setTemplate:YES];
[self.statusItem setImage:image];
斯威夫特:(最初由蔡志伟在下面的链接中回答)


此答案对此进行了详细解释:

使用Swift 3.0,您可以使用访问macOS外观,或使用以下代码访问“AppleInterfaceStyle”:

let mode = UserDefaults.standard.string(forKey: "AppleInterfaceStyle")
if UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Dark" {
    statusItem.image = NSImage(named: "WhiteIcon")
} else {
    statusItem.image = NSImage(named: "BlackIcon")
}
如果用户已启用暗模式,默认值将返回字符串“暗”。如果他们启用了“灯光模式”,它将返回零。因此,您需要将其包装在以下代码中:

let mode = UserDefaults.standard.string(forKey: "AppleInterfaceStyle")
if UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Dark" {
    statusItem.image = NSImage(named: "WhiteIcon")
} else {
    statusItem.image = NSImage(named: "BlackIcon")
}
我相信可能会有一个更干净的方法,也许有一个守卫,但这会让你在Swift 3.0中达到你需要的位置

编辑:

上述代码将确定用户当前的“模式”。但是,对用户首选项使用简单的检查不会导致正确的行为(例如,它只会在应用程序启动时触发)

执行此操作的正确方法是将菜单图标设置为黑色图标。然后,浏览到资源目录中的资源,并选择菜单图标。选择菜单后,浏览至属性检查器,并确保使用“Mac”设备检查图像。然后选择“渲染为”设置为“模板图像”

这只需要您有一个黑色图标,macOS将处理图像从暗模式到亮模式的转换