Внешние константы для UIColor, UIFont и т. Д. - PullRequest
7 голосов
/ 20 августа 2011

У меня есть файл constants.m, который представляет собой централизованную коллекцию многих программных констант. Чтобы установить цвет, я делаю это:

@implementation UIColor (UIColor_Constants) 

+(UIColor *) defaultResultTableBackgroundColor{
    //return [[UIColor colorWithRed:0.6f green:0.004f blue:0.0f alpha:1.0f] retain];
    return [[UIColor colorWithRed:0.1f green:0.004f blue:0.3f alpha:0.3f] retain];
}

+(UIColor *) defaultResultHeaderBackgroundColor{
    return [[UIColor clearColor] retain];
}

@end

а в константах.ч у меня

@interface UIColor (UIColor_Constants) 

+(UIColor *) defaultResultTableBackgroundColor;
+(UIColor *) defaultResultHeaderBackgroundColor;

@end

, а затем просто используйте [UIColor defaultResultTableBackgroundColor], где я хочу сослаться на эту константу.

Мне бы хотелось иметь некоторые другие константы UIColor и UIFont, и, хотя это работает, кажется, что это более сложно, чем нужно. Есть ли более простой способ сделать это?

Ответы [ 5 ]

9 голосов
/ 20 августа 2011

Я использую файл констант для той же цели.Вместо того чтобы настраивать весь интерфейс и файл реализации, я создаю файл констант как файл заголовка (.h).Затем я определяю цвета, которые хочу использовать, например:

#define globalColor [UIColor colorWithRed:0.1f green:0.004f blue:0.3f alpha:0.3f]

Затем, каждый раз, когда вы используете globalColor, это все равно, что набирать определенный код.

6 голосов
/ 11 декабря 2014

Вот отличное чтение, которое объясняет константы в Цели C:

Как лучше всего создавать константы в Objective-C

Краткий ответ: Вы справляетесь с этим наилучшим из возможных способов.

Макросы не рекомендуются. Как уже упоминалось, вы можете # определить макрос для обработки ваших цветов. По сути, это говорит препроцессору запускать поиск и замену в вашем коде. У этого подхода есть ряд недостатков, в том числе область применения и тип. Apple явно рекомендует против этих типов «констант»: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingIvarsAndTypes.html

Также возможно создать константу:

(в вашем заголовке, область действия файла)

extern UIColor *  const COLOR_LIGHT_BLUE;

(в вашей реализации, объем файла)

UIColor* const COLOR_LIGHT_BLUE = [[UIColor alloc] initWithRed:21.0f/255 green:180.0f/255  blue:1 alpha:1];

Конечно, вы можете #import этого заголовка в заголовке префикса, чтобы сохранить еще больше ввода. В конечном счете, это не намного лучше того, что вы уже делаете.

6 голосов
/ 20 августа 2011

Мне тоже так нравится.Один вопрос: почему вы сохраняете уиколор?Это очень опасно.Это очень вероятно, чтобы сделать ошибку и вызвать утечку памяти.

2 голосов
/ 20 августа 2011

Вы создаете постоянный заголовочный файл, который содержит все ваши цвета и / или шрифты, такие как:

0 голосов
/ 12 июля 2016

Ответ очень прост. Может использоваться для NSArray и NSDictionary и т. Д.

//Font
static UIFont *titleFont() {
    static UIFont *font = nil;
    if (!font) {
        font = [UIFont systemFontOfSize:25 weight:UIFontWeightHeavy];
    }
    return font;
}

//Color
static UIColor *prettyPurpleColor() {
    static UIColor *color = nil;
    if (!color) {
        color = [[UIColor purpleColor] colorWithAlphaComponent:0.35];
    }
    return color;
}
...