Objective C定义UIColor常量

我有一个iPhone应用程序,我的主题有一些自定义颜色。 由于这些颜色将为我的UI修复,我想在要包含的类中定义颜色(Constants.h和Constants.m)。 我怎么做? (简单地定义它们不起作用,因为UIColors是可变的,并且会导致错误 – Initalizer不是恒定的)。

/* Constants.h */ extern UIColor *test; /* Constants.m */ UIColor *test = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; 

谢谢!

UIColor不可变。 我通常用颜色,字体和图像来做这件事。 您可以轻松地修改它以使用单例或具有静态初始化程序。

 @interface UIColor (MyProject) +(UIColor *) colorForSomePurpose; @end @implementation UIColor (MyProject) +(UIColor *) colorForSomePurpose { return [UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0]; } @end 

为简单起见,我这样做了:

 /* Constants.h */ #define myColor [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0] 

不要忘记遗漏’;’ 所以你可以将它用作普通表达式。

我不确定这种方法在技术上是否存在任何问题,但它工作正常,并且避免了编译时常量初始化程序错误 – 这个代码实际上卡在了“myColor”的任何位置,所以它永远不会得到编译,直到你实际使用它。

另外一个选项

在你的.h你可以做到

 extern UIColor * const COLOR_LIGHT_BLUE; 

在你的mm中,你可以做到

 UIColor* const COLOR_LIGHT_BLUE = [[UIColor alloc] initWithRed:21.0f/255 green:180.0f/255 blue:1 alpha:1];//;#15B4FF 

如果你正在寻找一个没有扩展的快速而肮脏的人,请使用clang :

 #define kGreenColor colorWithRed:(0/255.0) green:(213/255.0) blue:(90/255.0) alpha:1.0 - (void)doSomething { _label.textColor = [UIColor kGreenColor]; } 

通常人们将全局常量放入单个对象中 – 或者如前所述,您可以通过某个类的类方法使它们可访问。

这是另一种方式:

标题:

 #if !defined(COLORS_EXTERN) #define COLORS_EXTERN extern #endif COLORS_EXTERN UIColor *aGlobalColor; 

执行:

 #define COLORS_EXTERN #import "GlobalColors.h" @interface GlobalColors : NSObject @end @implementation GlobalColors + (void)load { aGlobalColor = [UIColor colorWithRed:0.2 green:0.3 blue:0.4 alpha:1]; } @end 

这有点像黑客,但你不需要在实现中重新定义颜色,你可以在没有方法调用的情况下访问颜色。

使用AppController使颜色可以全局访问,而不是静态变量。 从架构的角度来看,它是有道理的,如果你想假设改变颜色方案,即使在运行时,这只是AppController上的一个或两个方法