在iOS中,是否有一种方法可以将自定义颜色存储在文件中,并从代码中访问它们?

3
我是一名iOS新手,但我有一些为Android编程的经验。我记得在Android中,你可以在colors.xml文件中定义一组自定义颜色,然后在代码中使用它们,因此,每次需要应用新的颜色时无需以编程方式定义。
我的问题是:iOS中是否存在类似的机制?我已经在互联网上搜索了一种方法,可以在某个文件中创建自定义颜色,并在我的iOS应用程序中以编程方式使用它们,但没有找到任何内容。
提前致谢。
3个回答

7
如vokilam建议的那样,创建一个使用UIColor的类别,并通过类方法添加自定义颜色到该类别中总是很好的。在单个类中轻松跟踪颜色非常方便。可以这样做:
在Xcode中,文件->新建->新建->文件... Cocoa Touch->Objective-C类别->下一步->在“Category on”列表中选择UIColor->为类别命名->下一步->创建。
这将为您提供.h和.m文件...在您的.h文件中,添加一个自定义颜色方法,例如:
+(UIColor *)customLightGreenColor;

在.m文件中,您可以实现以下类似的方法(您有不同的选项来设置您的颜色):

+(UIColor *)customlightGreenColor
{
    UIColor *lightGreenColor = [UIColor colorWithRed:0.5 green:0.87 blue:0.0 alpha:1.0];
    return lightGreenColor;
}

同样地,您可以在您的类别中添加任意数量的颜色,并在您的应用程序中使用它。希望这能让您有所启示...

你的逐步解释帮我省去了很多麻烦。我按照你的指示操作,现在它可以正常工作了!非常感谢你! - NickJaremek
很高兴它对你有效。如果它达到了你的目的,你可以接受这个答案。 - GenieWanted

3
你可以使用类别扩展UIColor类,并在其中定义和实现颜色。就像[UIColor blackColor]一样。
实际上,你可以抽象出特定的颜色名称,并使用方法名称,例如primaryColorsecondaryColordefaultTextColoralternativeTextColorinverseTextColor等。

谢谢你提供这个有用的解决方案。我之前不知道 Objective C 中有 Categories 这个概念。看起来这个解决方案也可以类似地应用于自定义字体、图片等等。 - NickJaremek
是的,字体和故事板。请标记正确答案。 - vokilam

3
请按照以下步骤创建资源文件,其中包含颜色及其值: 1. 在您的项目资源中创建并添加一个 plist 文件。 2.plist 的类型设置为 array。将不同的颜色作为 array elements 添加进去。 3. 将每种颜色(数组元素)的 type 设置为 dictionary4. 在每个元素中添加一个 string 项来设置每个项的 color name5. 添加 3 个 float items 作为存储 RGB color valuesRed, Green, Blue
您可以通过以下代码在任何地方使用您的颜色文件:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *colorsPlistPath = [documentsDirectory stringByAppendingPathComponent:@"Colors.plist"];
NSMutableArray *colors = [NSMutableArray arrayWithContentsOfFile:colorsPlistPath]];

//get color and their properties like:
NSDictionary *aColor = [colors objectAtIndex:0];
NSString *colorName = [aColor objectForKey:@"Color_Name"];
float redValue = [aColor floatForKey:@"Red"];
float greenValue = [aColor floatForKey:@"Green"];
float blueValue = [aColor floatForKey:@"Blue"];

UIColor *color = [UIColor colorWithRed:redValue/255.0f green:greenValue/255.0f blue:blueValue/255.0f alpha:1.0];

如果您已经知道如何创建和使用plist文件作为资源,那么整个过程对您将会更加容易。


谢谢您的回复,但是这种方法似乎比分类解决方案更复杂。我会考虑在其他问题上使用这种替代方法来解决。 - NickJaremek
这正是我一直寻找的东西。周围的几十篇帖子都没有像这篇文章一样给出如此有用的答案。非常感谢你。现在该创建一个Xcode扩展了.. =) - jungledev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接