Как заменить существующие UIColors
Я пытаюсь создать систему тем для своего приложения. Есть ли способ переопределить UIColors по умолчанию? Я уже пытался создать подкласс UIColor:
//.h file
#import <UIKit/UIKit.h>
@interface UIColor(UIColor_themeColor)
+ (UIColor *)blackColor;
@end
//.m file
#import "UIColor+themeColor.h"
#import "DeviceColor.h"
@implementation UIColor(UIColor_themeColor)
+ (UIColor *)blackColor {
return [self blackColor];
}
@end
Но тогда я получаю предупреждение Category is implementing a method which will also be implemented by its primary class
что понятно, и приложение будет зависать, если я его соберу.
Есть ли способ сделать то, что я люблю делать?
1 ответ
Думаю, преамбула, которую вы получите от всех: делать то, что вы хотите, - плохая идея как метод, называемый blackColor
должен вернуть черный цвет. Методы всегда должны быть соответствующим образом названы.
После преамбулы:
Используйте метод Swizzling. Вы не можете сделать это напрямую через объявления, но поскольку среда выполнения Objective C является динамической, вы можете переключать реализации методов во время выполнения. Вам нужно напрямую поговорить со средой выполнения, с ее C API, но это не так сложно.
Руководство Майка Эша проведет вас через теорию и покажет код, гораздо более понятный, чем я, вероятно, здесь.