我从服务器收到一个json响应。在回复中,我收到了一系列颜色名称,其中颜色名称类似于"Piel/Nude"、"Negro/Black"。
我想把这个颜色设置为UIButton的背景色。我尝试过这种方式,但应用程序每次都会崩溃:-
button.backgroundColor = [UIColor performSelector:NSSelectorFromString(@"Black")];
有人能帮我吗?
解决方案#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
您可以为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颜色或查找其他来源。将其存储在项目中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
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)];
如果有机会有很多颜色,最好从服务器更新json响应。不获取颜色名称,而是获取RGB&来自服务器的Alpha值;比如
{"红色":"0.0","绿色":"0.5","蓝色":"0.2","alpha":"1.0"}
然后你可以使用
[UIColor colorWithRed:red green:green blue:blue alpha:alpha];