xcode 4 / ios5 - как установить textColor на основе настроек - PullRequest
0 голосов
/ 13 декабря 2011

Я посмотрел на SO, но не могу найти ответ, который работает для меня, поэтому вот так:

Я пытаюсь установить цвет, шрифт и размер элементов в соответствии с предпочтениями пользователя. У меня нет проблем с шрифтом и размером шрифта, но я не могу заставить работать цвет.

Вот что я делаю:

  1. У меня есть группа констант, например:

    звездочка определяет kBlackColor @ "[UIColor blackColor]"

  2. Читая мой файл prefs, я определил, что хочу черный цвет, и установил

    txtColor = kBlackColor;

txtColor определяется как:

NSString *txtColor;
  1. Когда я хочу использовать txtColor, я пишу это:

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

Это компилируется, но выдает мне сообщение "нераспознанный селектор отправлен".

Я был бы признателен, если бы знал правильный путь для этого ..

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Когда вы сохраняете txtColor, вы сохраняете строку (забудьте о том факте, что она выглядит как target-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 голосов
/ 13 декабря 2011

Я решил прийти к проблеме по-другому, поэтому я должен ответить на свой вопрос - надеюсь, это кому-нибудь поможет.

Вместо того, чтобы разрешать пользователям изменять каждый параметр, я создал серию стилей (0-5), сохраненных (среди прочего) в списке.

Каждый стиль имеет набор переменных (имя шрифта, размер, цвет и т. Д.).

Файл настроек использует переменные, как показано ниже, и читается при запуске приложения:

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 используется для стилизации сегментированных ячеек.)

Опять же, я надеюсь, что это кому-нибудь поможет. Мне потребовалась вся ночь, чтобы найти это довольно простое решение ..

...