2013-11-21 3 views
6

Я хочу, чтобы определить глобальный цвет, который я могу повторно использовать для Downstate для различных пользовательских Ui клетокопределить глобальный цвету

Не уверен, что это правильный способ сделать это, но ..

Я ve определил класс, называемый lightGreyUIColor, который имеет этот файл .h -

#import <UIKit/UIKit.h> 

@interface lightGreyUIColor : UIColor 
+ (UIColor*)lightGreyBGColor; 

@end 

и этот. м-файл -

#import "lightGreyUIColor.h" 

@implementation lightGreyUIColor 

+ (UIColor*)lightGreyBGColor { 
return [UIColor colorWithRed:241.0/255.0 green:241/255.0 blue:241/255.0 alpha:1]; 
} 

@end 

Я включил lightGreyUIColor.h файл в файле реализации для Tableview и пытался ссылаться на него, как folows -

 cell.backgroundColor = [UIColor lightGreyBGColor]; 

Который просто выдает ошибку нет известного класса или метода для lightgreyBGColor, где я ошибаюсь, и есть ли лучший способ реализовать глобальный стиль, чем это?

+0

что-то не так с макросом – amar

ответ

24

Вы должны создать категорию, а не подкласс. Это расширит класс UIColor и добавит к нему ваши цвета.

.h

#import <UIKit/UIKit.h> 

@interface UIColor (CustomColors) 

+ (UIColor *)myColorLightGreyBGColor; 

@end 

.m

#import "UIColor+CustomColors.h" 

@implementation UIColor (CustomColors) 



+ (UIColor *)myColorLightGreyBGColor { 

    static UIColor *lightGreyBGColor; 

    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     lightGreyBGColor = [UIColor colorWithRed:241.0/255.0 
              green:241.0/255.0 
              blue:241.0/255.0 
              alpha:1.0]; 
    }); 

    return lightGreyBGColor; 
} 

@end 

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

+1

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

+1

Вы должны прикрепить свои методы категорий, чтобы избежать будущих столкновений с методами. Яблоко может добавить –

+0

@DavidCaunt и flex addicted спасибо за советы! –

2

Ваше имя класса lightGreyUIColor

Следовательно, вы должны использовать его в качестве

cell.backgroundColor = [lightGreyUIColor lightGreyBGColor]; 

Или вам нужно создать категорию на UIColor.


EDIT:

Ваш код [UIColor lightGreyBGColor] пытается искать метод в самой UIColor, однако вы подклассы UIColor по lightGrayUIColor.

Как вы звоните, похоже, что вы предназначены для категории.

Сторона Примечание: КлассName должен быть captial как LightGreyUIColor.

10

Как насчет макроса?

#define DEFAULT_COLOR_BLUE [UIColor colorWithRed:.196 green:0.3098 blue:0.52 alpha:1.0] 

Поместите его в файл appname_Prefix.pch или более вероятно, заголовочный файл включен в файл приставкой

И это будет так:

cell.backgroundColor = DEFAULT_COLOR_BLUE; 
1

Что вам нужно, это категория ,Читайте об этом here

В вашем случае, вы бы что-то вроде
UIColor + Grey.h

@interface UIColor (Grey) 

+(UIColor*) lightGreyBGColor; 
@end 

UIColor + Grey.m

#import "UIColor+Grey.h" 

@implementation UIColor (Grey) 

+(UIColor*) lightGreyBGColor { 
    //define color 
} 

Затем в контроллере, вам будет ссылаться на него как:

cell.backgroundColor = [UIColor lightGreyBGColor]; 
Смежные вопросы