我从服务器获得json响应。在那个回复中,我收到了一系列颜色名称,颜色名称就像“Piel / Nude”,“Negro / Black”。
我想将此颜色设置为UIButton的背景颜色。 我尝试过这种方式,但应用程序每次都崩溃: -
button.backgroundColor = [UIColor performSelector:NSSelectorFromString(@"Black")];
任何人都可以帮助我。
答案 0 :(得分:2)
解决方案#1 你应该有一个NSString,例如whiteColor或blueColor,你可以用以下方式转换它:
- (void)viewDidLoad {
[super viewDidLoad];
NSString *colorName=@"Yellow";
NSString *colorStr=[colorName lowercaseString];
colorStr=[NSString stringWithFormat:@"%@Color",colorStr];
UIColor *color=[self getColor:colorStr];
Yourbutton.backgroundColor=color;
}
-(UIColor *)getColor:(NSString*)colorStr
{
SEL getColor = NSSelectorFromString(colorStr);
UIColor *color = nil;
if ( [UIColor respondsToSelector:getColor] == YES) {
color = [UIColor performSelector:getColor];
}
return color;
}
解决方案#2
NSString *colorStr = @"red";
NSString *selectorString = [colorStr stringByAppendingString:@"Color"];
SEL selector = NSSelectorFromString(selectorString);
UIColor *color = [UIColor blackColor];
if ([UIColor respondsToSelector:selector]) {
color = [UIColor performSelector:selector];
}
Yourbutton.backgroundColor=color;
希望这能回答你的问题!
答案 1 :(得分:1)
解决方案#1
您可以为UIColor添加类别,该类别将按其名称返回颜色。现在UIColor有类方法:[UIColor blackColor],[UIColor orangeColor]等。如果你不喜欢它,你可以添加额外的类方法声明:
// category of UIColor
+ (UIColor *)Black { return [UIColor blackColor]; }
+ (UIColor *)Green { return [UIColor greenColor]; }
+ (UIColor *)MyBestColor { return [UIColor colorWithRed:0.5 green:0.8 blue:0.1 alpha:1.0]; }
在这种情况下,您的以下代码将起作用
button.backgroundColor = [UIColor performSelector:NSSelectorFromString(@"Black")];
解决方案#2
这是一种更复杂的方式。如果你想拥有所有颜色,即使那些未包含在UIColor声明中的颜色,你也可以这样做:
1)收集颜色名称和十六进制(或RGB)值。您可以从此处Web Colors解析数据或查找其他来源。将其存储在项目中plist文件的数组中。 2)添加将通过它的名称查找颜色值的类方法。像这样:
+ (UIColor *)colorByName:(NSString *)name {
// Here you will parse your plist file, find color value by it's name and create a color.
}
要从HEX字符串创建UIColor,您可以使用此项目HexColor
答案 2 :(得分:0)
UIColor
使用+ (UIColor *)colorNameColor
为您提供许多默认颜色,但不是您可能需要的所有颜色。因此,解决此问题的一种方法是在UIColor
上创建一个类别,并声明所需的类方法,例如+ (UIColor *)pielColor
或+ (UIColor *)nudeColor
并使用RGB值:
+ (UIColor *)pielColor
{
return [UIColor colorWithRed:1.0 green:0.8 blue:0.6 alpha:1.0];
}
然后使用:
NSString *methodName = [NSString stringWithFormat:@"%@Color", [yourColor lowercaseString]];
[UIColor performSelector:NSSelectorFromString(methodName)];
答案 3 :(得分:0)
如果有机会有很多颜色,最好从服务器更新json响应。不是获取颜色名称,而是获取RGB&来自服务器的Alpha值;等,
<强> { &#34;红色&#34; :&#34; 0.0&#34 ;, &#34;绿色&#34; :&#34; 0.5&#34;, &#34;蓝色&#34; :&#34; 0.2&#34 ;, &#34;阿尔法&#34; :&#34; 1.0&#34; } 强>
然后你可以使用,
[UIColor colorWithRed:red green:green blue:blue alpha:alpha];