通过继承UILabel以在故事板上使用的标准文本颜色 - (IBOutlet)

时间:2015-05-18 09:00:12

标签: ios objective-c uilabel subclass

我希望在我的应用中创建标准外观,其中某些 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中设置的任何颜色。

知道我做错了吗?

2 个答案:

答案 0 :(得分:3)

那是因为在init方法中还没有初始化UI对象。您需要在awakeFromNib方法中执行此操作。

-(void)awakeFromNib {
    [super awakeFromNib];
    [self setTextColor:kColourDefaultAppColourText];
}

或者你可以使用外观。将其设置为例如。 didFinishLaunchingWithOptions方法与您的子类:

[[CHLabel appearance] setTextColor:kColourDefaultAppColourText];

答案 1 :(得分:1)

执行此操作的正确方法是使用Appearance Proxy。

您可以在此处找到文档:https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAppearance_Protocol/index.html

要更改所有可以使用的UILabel的文本颜色

[[UILabel appearance] setTextColor: kColourDefaultAppColourText]; 

in

application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

您也可以使用

+ (instancetype)appearanceWhenContainedIn:(Class<UIAppearanceContainer>)ContainerClass 

在特定视图控制器中包含时更改UILabel的外观。