Что не так с моим кодом UIColor? - PullRequest
2 голосов
/ 18 ноября 2011

Я хочу сделать глобальное значение UIColor.

В AppDelegate.m я пишу

UIColor *fontcolor;

fontcolor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:1.0];

В MainViewController.m я пишу

extern UIColor *fontcolor;

[cell.textLabel setTextColor: fontcolor];

Но мойприложение вылетает без журнала.

Ответы [ 5 ]

4 голосов
/ 18 ноября 2011

Прежде всего, я хотел бы понять, почему вы пытаетесь создать глобальный UIColor в своем AppDelegate.m, если бы вы могли объяснить больше, почему вы делаете то, что делаете, что быбудь великим!

Однако, в то же время, проблема с твоим фактическим UIColor кодом, который я обнаружил в своих путешествиях.

Я всегда строю свои UIColor переменные следующим образом.В любом случае, когда дело доходит до стиля RGB.

[UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:255.0f/255.0f alpha:1.0f];

Причина, по которой я это делаю, заключается в том, что именно так работает форматирование RGB везде, где я смотрю.Это число из 255.

Теперь, что касается создания его глобальной переменной, я не вижу в этом смысла.Если это только для установки UILabel цвета, нет смысла делать это глобально.

Всякий раз, когда у вас есть UILabel, вы хотите изменить цвет, я считаю очень простым просто сделать

[cell.textLabel setTextColor:[UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:255.0f/255.0f alpha:1.0f]];

Где textLabel является основным UILabel в UITableViewCell.

РЕДАКТИРОВАТЬ

Просто прочитайте некоторыекомментариев.Я вижу, вы хотите изменить цвет в зависимости от предпочтений пользователя.Для этого просто используйте NSUserDefaults.

Конечный результат будет примерно таким:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"blue"]) {        
   [cell.textLabel setTextColor:[UIColor colorWithRed:120.0f/255.0f green:0.0f/255.0f blue:180.0f/255.0f alpha:1.0f]];
} else {
   [cell.textLabel setTextColor:[UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:255.0f/255.0f alpha:1.0f]];
}
2 голосов
/ 18 ноября 2011

Вы должны сохранить это: [fontcolor retain];

Тогда взгляните на какао правила управления памятью . Они объясняют, почему ваш цвет шрифта был освобожден.

0 голосов
/ 18 ноября 2011

Значение textColor UILabel может быть установлено только на ненулевое значение; установка этого свойства в ноль вызывает исключение.

Итак, я предполагаю, что ваш fontColor не правильно инициализирован в вашем приложении.

0 голосов
/ 18 ноября 2011

Лучший способ сделать это - добавить категорию на UIColor

Например:

// UIColor+MyColours.h
@interface UIColor (MyColours)

+ (UIColor *)fontColor;

@end

// UIColor+MyColours.m
@implementation UIColor (MyColours)

+ (UIColor *)fontColor
{
    static UIColor *fontColor = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        fontColor = [[UIColor alloc] initWithRed:0.0f green:0.0f blue:1.0f alpha:1.0f];
    });
    return fontColor;
}

@end

Затем вы можете просто использовать ее, выполнив: cell.textLabel.textColor = [UIColor fontColor];

0 голосов
/ 18 ноября 2011

Если вы объявили fontcolor в appDelegate, просто используйте его через appDelegate:

UIColor *clr = [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] fontColor];
[cell.textLabel setTextColor: clr];
...