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

时间:2014-11-13 10:25:34

标签: ios iphone ipad uibutton uicolor

我从服务器获得json响应。在那个回复中,我收到了一系列颜色名称,颜色名称就像“Piel / Nude”,“Negro / Black”。

我想将此颜色设置为UIButton的背景颜色。 我尝试过这种方式,但应用程序每次都崩溃: -

button.backgroundColor = [UIColor performSelector:NSSelectorFromString(@"Black")];

任何人都可以帮助我。

4 个答案:

答案 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];