使用iPhone中的颜色名称设置UIButton背景颜色



我从服务器收到一个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];

最新更新