我不知道是否有使用在Interface Builder常数,以避免手动设置在不同的地方,例如相同颜色的方法(这可能是一个非常繁琐的工作,有时...)如何在Interface Builder和代码之间共享常量?
目前我设置在代码中的颜色和使用#define来设置颜色,但显然IB不能使用#define ...
我不知道是否有使用在Interface Builder常数,以避免手动设置在不同的地方,例如相同颜色的方法(这可能是一个非常繁琐的工作,有时...)如何在Interface Builder和代码之间共享常量?
目前我设置在代码中的颜色和使用#define来设置颜色,但显然IB不能使用#define ...
我认为最简单的方法是在UIColor类上创建一个类别并创建一个类的方法就可以了。例如:
放置这在头文件中(例如+的UIColor CustomColors.h):
@interface UIColor (CustomColors)
+ (UIColor *)myCustomColor;
@end
地点这在一个实现文件(例如的UIColor + CustomColors.m)
@implementation UIColor (CustomColors)
+ (UIColor *)myCustomColor
{
return [UIColor colorWithRed:0.2 green:0.5 blue:0.2 alpha:1.0];
}
@end
然后,您可以在代码中的任意位置访问类方法,如下所示:
...
self.view.backgroundColor = [UIColor myCustomColor];
...
请参阅Apple's documentation on Categories欲了解更多信息。
或者,您可以通过系统调色板保存色板样本。要做到这一点,你只需调用系统调色板,选择一种颜色并将其拖入颜色网格中。
这些颜色现在不仅可以在您创建的每个Interface Builder文档中使用,而且可以在任何使用系统调色板的应用程序中使用。
color palette http://img.skitch.com/20091030-dhh3tnfw5d8hkynyr7e5q3amwg.png
我已经通过继承了不同的控制,以保证整个应用程序相同的样式解决此问题的工作。缺点是你无法在界面构建器中看到只有线框的样式。
比如我有一个
@interface MyButton : UIButton
@end
@implementation MyButton
-(void) initialize{
self.backgroundColor = [UIColor MyButonColor]; // Using a category on UIColor
}
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
[self initialize];
}
return self;
}
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super initWithCoder:decoder]) {
[self initialize];
}
return self;
}
感谢您的回答。其实,我希望在IB中设置颜色,而不是在代码中(这意味着我想避免self.backgroundColor = myColor)。但是,如果我在调色板中使用自定义颜色,并且如果我想在未来修改我的颜色的蓝色百分比,那么我仍然不得不在IB中手动进行自定义颜色被使用...我现在保留我的#define解决方案,它节省了我繁琐的重构时间.... – Unfalkster 2009-10-30 11:20:20