2015-02-23 40 views
2

我想从我的plist中检索一个UIColor字典,但在做这件事时遇到了一些麻烦。从Plist中检索颜色。 iOS

我将我的UIColors添加到字典中的plist中,然后添加到字符串中。 (见附件图片)

我正在为他们节省像这样在我的plist:

[UIColor colorWithRed:57/255.0 green:131/255.0 blue:50/255.0 alpha:1] 

然后,我有一个文件在哪里保存我的所有的颜色,如:

+ (instancetype)titleBarColor 
{ 
return [UIColor colorWithRed:57/255.0 green:131/255.0 blue:50/255.0 alpha:1]; 
} 

但我想做类似这样的事情:

+ (instancetype)titleBarColor 
{ 

NSBundle* settings = [NSBundle mainBundle]; 
NSMutableDictionary *testing = [settings objectForInfoDictionaryKey: @"appColours"]; 
UIColor *test = [testing objectForKey:@"titleBarColor"]; 
NSLog(@"Test Colour %@", test); 
return test; 
} 

但是,由于颜色被字符串拾取,显然会导致崩溃。

+1

并将其作为一个字符串十六进制值 – CW0007007 2015-02-23 13:17:22

+0

'UIColor'情况下不能直接存储到属性列表。只有'NSNumber','NSString','NSData','NSDate'和(可能是嵌套的)字典/数组的实例。 – 2016-10-18 02:05:11

回答

3

我将它们存储为十六进制值,然后使用以下方法来检索:

+ (UIColor *)colorFromHexString:(NSString *)hexString andAlpha:(CGFloat)alpha { 

    //If non valid string: 
    if (!hexString) 
     return nil; 

    unsigned rgbValue = 0; 
    NSScanner *scanner = [NSScanner scannerWithString:hexString]; 
    [scanner setScanLocation:1]; // bypass '#' character 
    [scanner scanHexInt:&rgbValue]; 
    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:alpha]; 
} 

,或者简单用逗号分隔的浮点值,并解析出来。那里有几个解决方案...

0

这里的CW0007007的答案的斯威夫特3/iOS版10版:

extension UIColor{ 
    static func colorFrom(hexString:String, alpha:CGFloat = 1.0)->UIColor{ 
     var rgbValue:UInt32 = 0 
     let scanner = Scanner(string: hexString) 
     scanner.scanLocation = 1 // bypass # character 
     scanner.scanHexInt32(&rgbValue) 
     let red = CGFloat((rgbValue & 0xFF0000) >> 16)/255.0 
     let green = CGFloat((rgbValue & 0x00FF00) >> 8)/255.0 
     let blue = CGFloat((rgbValue & 0x0000FF) >> 8)/255.0 
     return UIColor(red: red, green: green, blue: blue, alpha: alpha) 
    } 
}