我有几个使用Inteface Builder创建的黄色按钮。所有颜色都一样。目前我在每个xib中声明颜色。我可以在全球范围内宣布它并在所有xib中重复使用吗?我可以在Interface Builder中重用颜色吗?
回答
绝对是!
创建一个单独的对象(你可以叫它OksanaColor
,要冷静)...
...或者,如果你真懒,只读属性UIColor
,您可以从您的访问应用程序委托。
您也可以在UIColor上添加一个类别,这样您就可以像使用UIColor一样使用它。例如,在我的应用程序中,我添加了一个名为ApplicationColors的新文件,其中包含我所有的应用程序颜色。
@interface UIColor (ApplicationColours)
+(UIColor *)savaColor;
@end
实现:
@implementation UIColor (ApplicationColours)
+(UIColor *)savaColor
{
return [UIColor colorWithRed:228.0f/255.0f green:86.0f/255.0f blue:86.0f/255.0f alpha:1.0f];
}
@end
然后用它在我的应用程序,我导入ApplicationColours.h并使用相同的任何其他的UIColor。即:
label.textColor = [UIColor savaColor];
您可能希望使+ savaColor为该颜色保留一个静态变量,以便它不会每次都创建一个新实例。 – NSResponder 2012-01-11 09:45:04
是的好思想@NSResponder从来没有想过的:) – 2012-01-11 09:52:09
我不想在代码中做到这一点。我想在界面构建器中设置。 – Oksana 2012-01-13 06:45:14
这是UIColor
的命名颜色类别的一个非常简单的实现。有了这个代码在你的项目中,UIColor
会记住你要保存的所有颜色,并让你访问你自己的颜色或系统颜色使用+colorWithName:
@interface UIColor (namedColors)
+ (UIColor *) colorWithName:(NSString *) name;
+ (void) setColor:(UIColor *) color forName:(NSString *) name;
@end
static NSMutableDictionary *colorStorage;
@implementation UIColor (namedColors)
+ (NSMutableDictionary *) colorStorage
{
if (!colorStorage)
colorStorage = [[NSMutableDictionary alloc] initWithCapacity:10];
return colorStorage;
}
+ (UIColor *) colorWithName:(NSString *) name
{
UIColor *result =[[self colorStorage] valueForKey:name]; // See if we have a color with this name in the colorStorage.
if (result) return result;
SEL selector = NSSelectorFromString(name); // look for a class method whose selector matches the given name, such as "blueColor" or "clearColor".
if ([self respondsToSelector:selector] && (result = [self performSelector:selector]))
if ([result isKindOfClass:[self class]])
return result;
return nil;
}
+ (void) setColor:(UIColor *) color forName:(NSString *) name
{
[[self colorStorage] setValue:color forKey:name];
}
@end
也许太复杂了?简单的'[UIColor myRedColor]'或'[UIColor anotherRedColor]'就足够简单了,不是吗? – Tricertops 2013-08-11 16:31:30
是的,你可以做到这一点。
在Interface Builder的颜色选择器弹出框的底部,有一排正方形可用于存储颜色供以后使用。从颜色选择器顶部显示当前颜色的矩形中拖出一个颜色存储它,然后稍后单击存储的颜色以使用它。
当您决定更改颜色时,这将不允许您重新涂抹颜色。但这是保存颜色以供手动重复使用的唯一原始方式。 – Tricertops 2013-08-11 16:26:52
@iMartin你说得对,这是一个问题,我没有考虑它。但是,使用这种方法时,仍然可以在全局范围内交换颜色。如果要在故事板中更改颜色,只需在Storyboard的底层XML(或项目中的所有XIB)中查找并替换代表该颜色的所有标记。这是一种黑客攻击,但它会起作用,而且这不是你需要经常做的事情。 – 2013-08-12 10:27:45
在Interface Builder 不可能的。在代码中执行此操作,例如通过创建按钮的特殊子类。
您可以使用系统调色板来保存颜色,但是您仍然需要在每次决定更改时将其应用于所有按钮。或者您可以在颜色选择器中使用“最近使用的颜色”,但这两种方式都不够动态。
谢谢你真的回答了这个问题。 – KPM 2015-03-09 13:54:54
不幸的是我不相信有一种方法可以完全在界面生成器中完成。但是,你可以用一点代码来贴近。我发现能够改变整个应用程序的颜色在一个最好的方式是继承您要的颜色(的UILabel,例如)的项目在初始化设置颜色:
@interface HuedUILabel : UILabel
@end
@implementation HuedUILabel
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
self.textColor = [AppConfig primaryColor];
}
return self;
}
@end
然后,将标签设置为在IB自定义类:
现在,当你想改变你所有的UILabels的颜色,你可以通过改变你的一种颜色高清做到这一点,你不这样做不得不用一堆外观分配来混淆你的代码。
- 1. 在Interface Builder/Cocoa中可以改变颜色的简单方块
- 2. 变量的颜色在Interface Builder
- 3. XCode Interface Builder中的奇怪颜色?
- 4. 挑选颜色通过Interface Builder中
- 5. 我可以继承使用Interface Builder构建的视图吗?
- 6. 我可以使用Interface Builder将nib内容加载到UIView吗?
- 7. 我可以用jQuery淡入颜色吗?
- 8. 在Interface Builder中为MAC OSX设置背景颜色App
- 9. 我可以使用Interface Builder在多个笔尖之间注入依赖性吗?
- 10. 我可以通过Interface Builder在NSCollection视图中连接一个动作吗?
- 11. 在Dexpress的ASPxGridView中,我可以指定颜色编辑栏中的颜色吗?
- 12. 可重复使用Interface Builder中的TableViewCell与可变标签?
- 13. 有什么办法可以从Interface Builder中隐藏可用的类吗?
- 14. 与Interface Builder中
- 15. 使用Interface Builder的可重复使用的日期选择器可能吗?
- 16. 自定义色彩模式在Interface Builder
- 17. Interface Builder中可能存在的错误?
- 18. 我在哪里可以在Interface Builder中找到“可折叠面板”Cocoa控件?
- 19. GNUstep - GORM可以打开Interface Builder创建的NIB文件吗?
- 20. 如何通过Interface Builder设置NSButton的文本颜色?
- 21. 我可以在颜色主题中设置rgba颜色
- 22. 我可以使用HTML5 Canvas中的字符文字颜色吗?
- 23. 我可以在UITableView中添加不同的文字颜色吗?
- 24. 我可以在CSS中更改颜色的单个参数吗?
- 25. 有什么办法可以在Interface Builder中设置UINavigationBar的委托吗?
- 26. 从Shadertoy在Interface Builder(Xcode中)
- 27. Interface Builder中的UIDatePicker
- 28. 没有Interface Builder中
- 29. Interface Builder中的'Illegal Geometry'警告...重要?
- 30. 在Interface Builder中设置UIButton图层边框的宽度和颜色
“界面构建器”中的每个人都回答了这个问题的每个人都无法理解?奇怪的。 – 2013-08-11 14:11:22
@MarkAmery这意味着,唯一的方法是使用_code_。 – Tricertops 2013-08-11 16:25:30
真的很无聊,没有办法做到这一点。谁想要在IB中逐个调整100页的颜色? – Jonny 2015-12-07 14:15:58