0

我看过 SO 但找不到适合我的答案,所以这里是:

我正在尝试根据用户偏好设置颜色、字体和大小元素。我对字体和字体大小没有任何问题,但我似乎无法让颜色起作用。

这就是我正在做的事情:

  1. 我有一组常量,例如:

    星号定义 kBlackColor @"[UIColor blackColor]"

  2. 在阅读我的 prefs 文件时,我确定我想要 blackColor,并设置

    txtColor = kBlackColor;

txtColor 定义为:

NSString *txtColor;
  1. 当我想使用 txtColor 时,我正在写这个:

    cell.textLabel.textColor = (UIColor *) txtColor;

这编译,但给了我一个“无法识别的选择器发送”消息。

我会很感激知道正确的方法来解决这个问题..

4

2 回答 2

1

当您存储时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];
于 2011-12-13T04:56:15.563 回答
0

我决定以不同的方式来解决这个问题,所以我应该回答我自己的问题 - 我希望它可以帮助某人。

我没有允许用户更改每个设置,而是创建了一系列样式 (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 被定义为 NSStrings。字体大小是本地整数。

当我想给一个单元格设置样式时,我只需要输入这个:

cell.textLabel.font = [UIFont fontWithName:fontName size:fontSize];
cell.textLabel.textColor = selectedFontColor;

(tintColor 用于设置分段单元格的样式。)

再次,我希望这可以帮助某人。我花了一整夜才找到这个相当简单的解决方案..

于 2011-12-13T14:50:52.590 回答