我看了SO,但找不到适合我的答案,所以这里是:
我正在尝试根据用户偏好设置颜色,字体和大小元素。我对字体和字体大小没有问题,但我似乎无法使颜色工作。
这就是我正在做的:
-
我有一组常量,如:
星号define kBlackColor @"[UIColor blackColor]"
-
在读取我的prefs文件时,我已经确定我想要黑色,并设置
txtColor定义为:
NSString *txtColor;
当我想使用txtColor时,我这样写:
cell.textLabel。
这可以编译,但是给我一个"unrecognized selector sent"的消息。
当您存储txtColor
时,您正在存储一个字符串(忘记它看起来像objective-c的事实,您将其存储为字符串,并且一旦存储为字符串编译器如何使用它?),并且没有办法将字符串强制转换为UIColor
。怎么会有呢?
要将颜色存储到NSUserDefaults
中,必须将它们序列化为NSData
。
借用上一个答案:
存储颜色:
NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:color];
[[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"myColor"];
检索颜色:
NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"];
UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
我决定用不同的方式来解决这个问题,所以我应该回答我自己的问题——我希望它能帮助到别人。
我没有允许用户更改每个设置,而是创建了一系列样式(0-5),并存储在一个plist中。
每个样式都有一组变量(字体名称、大小、颜色等)。
设置文件使用如下所示的变量,在应用程序启动时读取:
AppDelegate *mainDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
styleKeyValue = [mainDelegate styleValueKey];
styleKey = [styleKeyValue intValue];
switch (styleKey) {
case 0:
fontName = @"Arial";
fontSize = 16;
selectedTintColor = [UIColor blackColor];
selectedFontColor = [UIColor blackColor];
backgroundImage = @"background0.png";
break;
case 1:
fontName = @"Times";
fontSize = 14;
selectedTintColor = [UIColor blueColor];
selectedFontColor = [UIColor blackColor];
backgroundImage = @"background1.png";
break;
case 5:
...
}
selectedTintColor和selectedFontColor定义为:
UIColor *selectedTintColor;
UIColor *selectedFontColor;
fontName和backgroundImage被定义为nsstring。字体大小为本地整数。
当我想给单元格设置样式时,我只需要输入这个:
cell.textLabel.font = [UIFont fontWithName:fontName size:fontSize];
cell.textLabel.textColor = selectedFontColor;
(tintColor是用来为分段细胞设置样式的)
再一次,我希望这能帮助到别人。我花了一整夜才想出这个相当简单的解决办法。