首页 > 解决方案 > 有没有办法在 iOS 应用程序中实现 2 个以上的主题(外观)?

问题描述

在 iOS 中,我想让用户在应用程序中选择不同的主题。

例如,以下语句将根据所选主题解析为不同的颜色代码。

UIColor(named: "greyNoteColor")!

但是,iOS 仅提供 2 种不同的主题(外观) - Any AppearanceDark Appearance

在此处输入图像描述

我想知道,有没有办法在 iOS 应用程序中支持超过 2 个主题?

例如,在 Android 中,我可以使用以下策略支持 2 个以上的主题。

<style name="Theme.WeNote.Red" parent="@style/Theme.WeNote.Base.Brown">
    <item name="greyNoteColor">#040404</item>
</style>

<style name="Theme.WeNote.Purple" parent="@style/Theme.WeNote.Base.Brown">
    <item name="greyNoteColor">#030303</item>
</style>

<style name="Theme.WeNote.Blue" parent="@style/Theme.WeNote.Base.Brown">
    <item name="greyNoteColor">#020202</item>
</style>

<style name="Theme.WeNote.Dark" parent="@style/Theme.AppCompat">
    <item name="greyNoteColor">#010101</item>
</style>

setTheme(R.style.Theme_WeNote_Red)
TypedValue typedValue = new TypedValue();
Resources.Theme theme = getTheme();
theme.resolveAttribute(R.attr.greyNoteColor, typedValue, true);

//
// Will resolve to color code #040404
//
int greyNoteColor = typedValue.data;

我想知道,我们如何才能实现与 iOS 应用程序类似的行为?

谢谢。

标签: iosswift

解决方案


您可以使用以下方法通过代码执行此操作:

public static let myColor: UIColor = {
    let theme = UserDefaults.standard.string(forKey: "theme")
    if (theme == "RED") {
        return UIColor.red
    } else if (theme == "GREEN") {
        return UIColor.green
    }
    
    // any other cases
    
    return UIColor.white
}()

推荐阅读