+ (UIColor *)colorFromHex:(unsigned long)hex
{
    return [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16))/255.0 green:((float)((hex & 0xFF00) >> 8))/255.0 blue:((float)(hex & 0xFF))/255.0 alpha:1.0];
}

这是我的职责

我将“查看颜色”设置为THis:
[self.view setBackgroundColor:[UIColor colorFromHex:0x8a32cb]];

现在的问题是:

我在plist文件中从服务器获取颜色代码
就像pdColor:#8a32cb

我这样分开:
NSString *pdColor;
pdColor = [(NSString *)[temp objectForKey:@"pdColor"] stringByReplacingOccurrencesOfString:@"#" withString:@"0x"];

pdCOlor是字符串格式。
我需要在这里应用它:
[self.view setBackgroundColor:[UIColor colorFromHex:pdColor]];

但是它是无符号的,所以没有正确的颜色代码。

请帮我解决这个问题。

最佳答案

您不需要stringByReplacingOccurrencesOfString
可以使用strtoul()将十六进制字符串转换为数字。请注意+ 1跳过初始"#字符:

NSString *pdColor = [temp objectForKey:@"pdColor"]; // The string "#8a32cb"
unsigned long color = strtoul([pdColor UTF8String] + 1, NULL, 16);
[self.view setBackgroundColor:[UIColor colorFromHex:color]];

09-30 22:09