我有一个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];
谢谢!
答案 0 :(得分:45)
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
答案 1 :(得分:30)
为简单起见,我这样做了:
/* Constants.h */
#define myColor [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0]
不要忘记遗漏';'所以你可以把它用作正常表达式。
我不确定这种方法在技术上是否存在任何问题,但它工作正常,并且避免了编译时常量初始化程序错误 - 这个代码实际上卡在了'myColor'的任何位置,所以它没有'直到你真正使用它为止。
答案 2 :(得分:14)
另一个选择
在你的.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
答案 3 :(得分:3)
如果您正在寻找一个没有扩展名的快速而肮脏的人,请使用clang:
#define kGreenColor colorWithRed:(0/255.0) green:(213/255.0) blue:(90/255.0) alpha:1.0
- (void)doSomething
{
_label.textColor = [UIColor kGreenColor];
}
答案 4 :(得分:0)
通常人们将全局常量放入单个对象中 - 或者如前所述,您可以通过某个类的类方法来访问它们。
答案 5 :(得分:0)
这是另一种方式:
部首:
#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
这有点像黑客,但你不需要在实现中重新定义颜色,你可以在没有方法调用的情况下访问颜色。
答案 6 :(得分:-1)
使用AppController使颜色可以全局访问,而不是静态变量。从架构的角度来看,这是有道理的,如果你想假设改变颜色方案,即使在运行时,这也只是AppController上的一个或两个方法