我正试图为我的应用程序制作一个主题系统。是否有办法重新定义默认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
,这是可以理解的,如果我构建它,应用程序将崩溃。
有没有办法做我喜欢做的事?
你会从每个人那里得到序言,我认为:做你想做的是一个坏主意,因为一个叫做blackColor
的方法应该返回黑色。方法应该总是有合适的命名
Post-preamble:
使用方法swizling。你不能直接通过声明来实现,但是因为Objective-C运行时是动态的,你可以在运行时切换方法的实现。你需要直接与运行时对话,使用它的C API,但这并不太棘手。
Mike Ash的指南将引导您了解理论并向您展示代码,比我在这里可能要清楚得多。