我希望在我的应用中创建标准外观,其中某些 UILabel
具有特定的textColor
。
我的UILabel
上有几个UIViewController
,而viewDidLoad
方法我调用了一个设置textColor
属性的函数:
[[CHToolKit sharedToolkit] uiLabelAppearanceFeatured:[self IBOLabelStepsRemaining]];
CHToolkit
是我为misc任务创建的单身人士。
而且,上述效果很好。但我必须在这里做到这一点 - 我需要一个具有自定义颜色的UILabel
。现在,我想到一个更谨慎的做法是将UILabel
,(我称之为CHLabel
)子类化,创建我自己的实例,并在init方法中它,在那里定义textColor
。然后,在向我的VC添加新的UILabel时,我可以选择我的自定义类而不是UILabel
。
我的自定义UILabel
的实现简单如下:
#import "CHToolKit.h"
#import "CHLabel.h"
@implementation CHLabel
- (CHLabel *)init {
if (self = [super init]) {
[self setTextColor:kColourDefaultAppColourText];
}
return self;
} // init
@end
所以,当我将UILabel
拖到我的故事板上(在Interface Builder中)时,我会从自定义类部分选择CHLabel
,(替换UILabel
)。而且,这让我可以做到。
现在,在运行时,我希望我的CHLabel
具有不同的颜色,即我的自定义类中定义的颜色。但它不。它仍然是黑色,或IB中设置的任何颜色。
知道我做错了吗?
答案 0 :(得分:3)
那是因为在init方法中还没有初始化UI对象。您需要在awakeFromNib方法中执行此操作。
-(void)awakeFromNib {
[super awakeFromNib];
[self setTextColor:kColourDefaultAppColourText];
}
或者你可以使用外观。将其设置为例如。 didFinishLaunchingWithOptions方法与您的子类:
[[CHLabel appearance] setTextColor:kColourDefaultAppColourText];
答案 1 :(得分:1)
执行此操作的正确方法是使用Appearance Proxy。
要更改所有可以使用的UILabel的文本颜色
[[UILabel appearance] setTextColor: kColourDefaultAppColourText];
in
application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
您也可以使用
+ (instancetype)appearanceWhenContainedIn:(Class<UIAppearanceContainer>)ContainerClass
在特定视图控制器中包含时更改UILabel的外观。