2012-04-02 67 views
0

问题出在标题中,如何从Plist中设置UILabel的UIColor?如何从Plist中设置UILabel的UIColor

我想这:

UIColor *colorLabel; 

我在plist中添加的NSString行,并写了redColor作为一种价值,但不工作...

我该怎么处理呢?

谢谢你们。

回答

0

我个人存储RGBA值,而不是字符串,然后你可以使用

+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha 

不要做以下

就像一个有趣的注意最不灵活的方式是使用UIColor便利方法,如

[UIColor performSelector:NSSelectorFromString(@"redColor")] 
0

我认为你需要从字符串转换为UIColor。你用十六进制颜色(对于红色的ff0000)将颜色放入你的plist中,然后使用下面的函数获得UIColor。

+ (UIColor *) colorWithHexString: (NSString *) stringToConvert 
{ 
    NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 
    // String should be 6 or 8 characters 
    if ([cString length] < 6) return [UIColor blackColor]; 
    // strip 0X if it appears 
    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2]; 
    if ([cString length] != 6) return [UIColor blackColor]; 
    // Separate into r, g, b substrings 
    NSRange range; 
    range.location = 0; 
    range.length = 2; 
    NSString *rString = [cString substringWithRange:range]; 
    range.location = 2; 
    NSString *gString = [cString substringWithRange:range]; 
    range.location = 4; 
    NSString *bString = [cString substringWithRange:range]; 
    // Scan values 
    unsigned int r, g, b; 
    [[NSScanner scannerWithString:rString] scanHexInt:&r]; 
    [[NSScanner scannerWithString:gString] scanHexInt:&g]; 
    [[NSScanner scannerWithString:bString] scanHexInt:&b]; 
     
    return [UIColor colorWithRed:((float) r/255.0f) 
                       green:((float) g/255.0f) 
                            blue:((float) b/255.0f) 
                       alpha:1.0f]; 
} 
+0

或者您可以保存RGBA值,而不必混淆转换... – 2012-04-02 10:35:40

0

为了保持可读性,我做了这个类别:

@implementation UIColor (EPPZRepresenter) 


NSString *NSStringFromUIColor(UIColor *color) 
{ 
    const CGFloat *components = CGColorGetComponents(color.CGColor); 
    return [NSString stringWithFormat:@"[%f, %f, %f, %f]", 
      components[0], 
      components[1], 
      components[2], 
      components[3]]; 
} 

UIColor *UIColorFromNSString(NSString *string) 
{ 
    NSString *componentsString = [[string stringByReplacingOccurrencesOfString:@"[" withString:@""] stringByReplacingOccurrencesOfString:@"]" withString:@""]; 
    NSArray *components = [componentsString componentsSeparatedByString:@", "]; 
    return [UIColor colorWithRed:[(NSString*)components[0] floatValue] 
          green:[(NSString*)components[1] floatValue] 
          blue:[(NSString*)components[2] floatValue] 
          alpha:[(NSString*)components[3] floatValue]]; 
} 


@end 

所使用的NSStringFromCGAffineTransform相同的格式。这实际上是eppz!kit at GitHub中更大规模的plist对象代表的一部分。