macos - pages - ¿Cómo detectar si OS X está en modo oscuro?
modo oscuro pages (4)
No creas que todavía hay una forma de cacao para detectarlo, sin embargo, puedes usar los defaults read
para verificar si OSX está en modo oscuro o no.
defaults read -g AppleInterfaceStyle
O bien devuelve Dark
(modo oscuro) o devuelve el par de dominio no existe.
EDITAR:
Como dijo Ken Thomases, puede acceder a .GlobalPreferences a través de NSUserDefaults, por lo que
NSString *osxMode = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"];
Si osxMode es nil
entonces no está en modo oscuro, pero si osxMode es @"Dark"
entonces está en modo oscuro.
Mi aplicación de cacao debe cambiar su comportamiento cuando se ejecuta en el nuevo "modo oscuro" de OS X.
¿Hay alguna forma de detectar si el estilo OS X está configurado en este modo?
Puede detectar esto utilizando el método NSAppearanceCustomization
, buscando darkAqua
.
Ejemplo de Swift 4:
extension NSView {
var isDarkMode: Bool {
if #available(OSX 10.14, *) {
if effectiveAppearance.name == .darkAqua {
return true
}
}
return false
}
}
Swift 2 -> String ("Dark", "Light")
let appearance = NSUserDefaults.standardUserDefaults().stringForKey("AppleInterfaceStyle") ?? "Light"
Swift 3 -> Enum (Oscuro, Claro)
enum InterfaceStyle : String {
case Dark, Light
init() {
let type = UserDefaults.standard.string(forKey: "AppleInterfaceStyle") ?? "Light"
self = InterfaceStyle(rawValue: type)!
}
}
let currentStyle = InterfaceStyle()
También puede envolverlo en un booleano si no tiene ganas de lidiar con enumeraciones y declaraciones de cambio:
/// True if the application is in dark mode, and false otherwise
var inDarkMode: Bool {
let mode = UserDefaults.standard.string(forKey: "AppleInterfaceStyle")
return mode == "Dark"
}
Funciona en Swift 4.2