我的cocoa应用程序在新的OS X"黑暗模式"下运行时必须改变其行为.
有没有办法检测OS X样式是否设置为此模式?
如果您不想处理枚举和switch语句,也可以将其包装为布尔值:
/// True if the application is in dark mode, and false otherwise var inDarkMode: Bool { let mode = UserDefaults.standard.string(forKey: "AppleInterfaceStyle") return mode == "Dark" }
适用于Swift 4.2
Swift 2 - > String("Dark","Light")
let appearance = NSUserDefaults.standardUserDefaults().stringForKey("AppleInterfaceStyle") ?? "Light"
Swift 3 - > Enum(黑暗,光明)
enum InterfaceStyle : String { case Dark, Light init() { let type = UserDefaults.standard.string(forKey: "AppleInterfaceStyle") ?? "Light" self = InterfaceStyle(rawValue: type)! } } let currentStyle = InterfaceStyle()
您可以通过检查来检测使用此NSAppearanceCustomization
方法。effectiveAppearance
darkAqua
Swift 4示例:
extension NSView { var isDarkMode: Bool { if #available(OSX 10.14, *) { if effectiveAppearance.name == .darkAqua { return true } } return false } }
不要认为有可靠的方法来检测它,但是你可以defaults read
用来检查OSX是否处于黑暗模式.
defaults read -g AppleInterfaceStyle
返回Dark
(暗模式)或返回域对不存在.
编辑:
正如Ken Thomases所说,你可以通过NSUserDefaults访问.GlobalPreferences,所以
NSString *osxMode = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"];
如果是osxMode nil
那么它不是处于黑暗模式,但是如果是osxMode @"Dark"
那么它处于黑暗模式.