2009-10-28 81 views
5

我不知道是否有使用在Interface Builder常数,以避免手动设置在不同的地方,例如相同颜色的方法(这可能是一个非常繁琐的工作,有时...)如何在Interface Builder和代码之间共享常量?

目前我设置在代码中的颜色和使用#define来设置颜色,但显然IB不能使用#define ...

回答

-1

我认为最简单的方法是在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

+0

感谢您的回答。其实,我希望在IB中设置颜色,而不是在代码中(这意味着我想避免self.backgroundColor = myColor)。但是,如果我在调色板中使用自定义颜色,并且如果我想在未来修改我的颜色的蓝色百分比,那么我仍然不得不在IB中手动进行自定义颜色被使用...我现在保留我的#define解决方案,它节省了我繁琐的重构时间.... – Unfalkster 2009-10-30 11:20:20

0

我已经通过继承了不同的控制,以保证整个应用程序相同的样式解决此问题的工作。缺点是你无法在界面构建器中看到只有线框的样式。

比如我有一个

@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; 
}