【问题标题】:How to define a color scheme in Xcode如何在 Xcode 中定义配色方案
【发布时间】:2014-06-18 06:26:03
【问题描述】:

我想为我的 iOS 项目定义一个配色方案,以便于替换某些颜色。假设我有一个“主要”颜色和一个“次要”颜色,在我的应用程序的许多元素中使用,将来我可能想将“主要”颜色设置为它当前拥有的任何其他值。

到目前为止,我一直在使用自定义 UIColor 类别在代码中定义和使用我的颜色,并创建具有相同颜色的调色板以在 IB 和 Storyboards 中使用它。

这样,在代码中替换颜色非常简单,但是在 IB 和 Storyboard 中这样做非常痛苦……我没有找到查找/替换颜色的简单方法。 p>

知道如何做到这一点吗?我愿意接受任何建议。提前谢谢你

编辑 1: 问题可能不够清楚。我想创建一个方案,例如我可以在代码和 IB 中使用它,但只定义一次颜色,并且能够以代码和 IB 中引用的颜色相应更改的方式切换颜色。

【问题讨论】:

  • 听起来你想看看UIAppearance。它允许您更改整个应用程序的外观(例如颜色和色调)。唯一的缺点是主题在 IB 中不可见。
  • @David 我知道 UIAppearance 功能,我将它与我的 UIColor 类别结合使用。正如您所提到的,我不知道如何在 IB 和 Storyboards 中做类似的事情。
  • 我认为没有办法。您可能能够解析 .storyboard 文件(它只是复杂的 xml)和/或使用脚本对其进行修补。
  • 我查看了该文件,至少寻找 RGB、HEX 或类似代码,但我发现在 .storyboard 文件中,颜色是用红色、绿色、蓝色和 alpha 的浮点值描述的,或白色和 alpha,取决于您在 IB 中如何定义它们。你知道,这只是一场噩梦!
  • 对我来说看起来像是 XSLT 的工作 :)

标签: ios xcode colors palette


【解决方案1】:

我可以在 Swift 中做到这一点的简单方法:

  • 首先,我们必须根据需要创建尽可能多的目标方案,点击实际方案并选择新方案

  • 在 Assets Catalog 中创建颜色集 Colors.xcassets 如下颜色:

  • 然后在 Colors.xcassets 中选择一个目标成员

  • 然后创建另一个 Colors.xcassets

  • 然后在这个新的 Colors.xcassets 上再次创建另一个相同的颜色:

  • 然后在这个新的 Colors.xcassets 中选择另一个Target members

  • 然后使用引用的相同名称(我们使用 PrimaryColor)通过代码分配颜色,如下例所示:

    struct Resources {
    
        struct Colors {
            //struct is extended in Colours
        }
    }
    
    extension Colors {
    
        struct Primary {
           static let Default = UIColor(named: "PrimaryColor")!
        }
    }
    
  • 然后是实现:

    newLabel.backgroundColor = Resources.Colors.Primary.Default
    

最后根据选择的方案,会画出一些颜色或其他颜色。

我发现的另一种方法是下一个链接:

Protocol-Oriented Themes for iOS Apps

【讨论】:

    【解决方案2】:

    您可以选择循环添加在父视图中的子视图。并且可以定义一组你想要改变颜色的元素。

    所以你的代码可能如下所示

    -(void)defineColors:(UIView *)parent{
    
        for(UIView *view in parent.subviews){
    
          if(view.tag == TAG1){
            [self setColor:COLOR1 forControl:view];
          }else if(view.tag == TAG2){
            [self setColor:COLOR2 forControl:view];
          }
    
        }
    
    }
    
    -(void)setColor:(UIColor *)color forControl:(UIView *)control{
    
          if([control isKindOfClass:[UILabel class]]){
                    [(UILabel *)view setBackgroundColor:color];
          }else if([control isKindOfClass:[UITextField class]]){
                    [(UITextField *)view setTextColor:color];
          }
    
          //So on..
    
    
    }
    

    希望对你有帮助。

    干杯。

    代码更新

    您可以选择为要分配特定颜色的控件定义一组标签,然后相应地设置颜色..

    更新 2

    根据您编辑的问题,您可以有一个独立的xib,您可以在其中添加不同的小UIView,您可以从xib 定义颜色。为不同的视图创建插座。然后将笔尖加载到AppDelegate 以获取您要使用的应用程序的不同颜色,您可以将它们保存到Singleton Class 以便您可以随时获取它们而无需多次初始化。

    【讨论】:

    • 感谢您的快速回复,但如果您阅读我的问题,我知道如何对代码中引用的颜色执行此操作。另外,我没有提到我想根据视图的类型为其设置颜色。相反,我想为特定视图设置特定颜色。
    • @sonxurxo 我知道你知道怎么做,我给出的解决方案有很多好处,1.你不需要创建 Outlets 2.你可以创建你想要的标签集设置颜色..我会更新我的代码..
    • 也许基于视图标签的解决方案会很有用,但我想创建一个配色方案,例如我可以在代码和 IB 中使用它
    • 你完全正确,我的错。我已经审查了我的问题并对其进行了编辑以使其更清晰,这有点令人困惑。我认为现在更清楚了。
    • 我赞成你的问题,因为这是一种原始的方法,但它仍然不能解决从 IB 和 Storyboards 引用颜色的问题
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2023-02-20
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多