Глобальное объявление UIColor в проекте

Возможный дубликат:
Цель C, определяющая константы UIColor

Я бы хотел использовать несколько цветов в своем приложении. Вместо того, чтобы создавать UIColor в каждом экземпляре или в каждом viewController, я могу использовать его во всем приложении.

или разумно использовать файл заголовка ColourConstants.h, где я # определяю каждый цвет, который хочу использовать

i.e

#define SCARLET [UIColor colorWithRed:207.0/255.0 green:47.0/255.0 blue:40.0/255.0 alpha:1];

заранее спасибо!


person Sohan    schedule 09.04.2012    source источник


Ответы (2)


Я бы использовал категорию на UIColor. Например:

// In UIColor+ScarletColor.h

@interface UIColor (ScarletColor)

+ (UIColor*)scarletColor;

@end


// In UIColor+ScarletColor.m

@implementation UIColor (ScarletColor)

+ (UIColor*)scarletColor {
    return [UIColor colorWithRed:207.0/255.0 green:47.0/255.0 blue:40.0/255.0 alpha:1];
}

@end

И когда вы хотите использовать цвет, вам нужно сделать только это:

#import "UIColor+ScarletColor.h"

....

UIColor *scarlet = [UIColor scarletColor];

Надеюсь, поможет!!

person Garoal    schedule 09.04.2012
comment
+1 очень прямолинейно и просто. должен был подумать об этом :-) - person Sohan; 10.04.2012
comment
Совет: поместите #import "UIColor+ScarletColor.h" в свой Prefix.pch файл, и вы сможете получить к нему доступ откуда угодно. Без явного импорта - person mkral; 07.11.2012

Макрос удобнее, так как он определен только в одном месте.

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

Если вы хотите иметь уникальный экземпляр, вам придется использовать FOUNDATION_EXPORT (что означает extern).

В общедоступном файле .h объявляется следующее:

FOUNDATION_EXPORT UIColor * scarlet;

Это сообщит компилятору, что переменная scarlet (типа UIColor) будет существовать в какой-то момент (когда программа связана).
Таким образом, это позволит вам использовать ее.

Затем вам нужно создать эту переменную в файле .m.
Вы не можете присвоить ее значение напрямую, так как это значение времени выполнения, поэтому просто установите для него значение nil:

UIColor * scarlet = nil;

А затем в какой-то момент вашей программы (возможно, в делегате вашего приложения) установите его значение:

scarlet = [ [ UIColor ... ] retain ];

Не забудьте сохранить его, так как это глобальная переменная, которая должна существовать в течение всего времени жизни программы.

Таким образом, у вас будет только один экземпляр, доступный отовсюду.

person Macmade    schedule 09.04.2012