【问题标题】:How to set Mac application user interface light/dark theme back to default in Objective C?如何在Objective C中将Mac应用程序用户界面亮/暗主题设置回默认值?
【发布时间】:2021-06-17 03:05:42
【问题描述】:

在我的 Qt 应用程序中,我想让用户选择将应用程序的明暗主题设置为:

  1. 与操作系统主题相同
  2. Light(忽略操作系统主题)
  3. 深色(忽略操作系统主题)

对于 1. 我可以使用这个 Objective C 来计算操作系统主题:

bool macIsInDarkTheme()
{
    if (__builtin_available(macOS 10.14, *))
    {
        auto appearance = [NSApp.effectiveAppearance bestMatchFromAppearancesWithNames:
                @[ NSAppearanceNameAqua, NSAppearanceNameDarkAqua ]];
        return [appearance isEqualToString:NSAppearanceNameDarkAqua];
    }
    return false;
}

对于 2. 我可以称之为 Objective C:

void macSetToLightTheme()
{
    if (__builtin_available(macOS 10.14, *))
    {
        [NSApp setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameAqua]];
    }
}

对于 3. 我可以称之为 Objective C:

void macSetToDarkTheme()
{
   if (__builtin_available(macOS 10.14, *))
   {
        [NSApp setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameDarkAqua]];
   }
}

这一切都有效。如果用户想从 2. 或 3. 回到 1,就会出现问题。如何将外观设置回从操作系统获取的默认值?我是一名 C++ 程序员,对 Objective C 没有任何经验。

【问题讨论】:

    标签: objective-c macos qt darkmode


    【解决方案1】:

    将应用的外观设置为 nil 应该回退到默认行为(外观继承自系统偏好):

    [NSApp setAppearance:nil];
    

    https://developer.apple.com/documentation/appkit/nsapplication/2967170-appearance?language=objc

    当此属性的值为 nil(默认值)时,AppKit 将当前系统外观应用于应用程序的用户界面元素,包括其窗口、视图、面板和弹出框。将 NSAppearance 对象分配给此属性会导致应用的界面元素采用指定的外观。

    【讨论】:

    • 谢谢,我去看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2012-04-07
    相关资源
    最近更新 更多