2015-05-18 60 views
1

我希望創建一個標準的外觀和我的應用程序,其中一些UILabel有一個具體的textColor內感覺。標準文本顏色 - (IBOutlet中)

我有我的UIViewController幾個UILabel,並在viewDidLoad方法我打電話,設置了textColor屬性的函數:

[[CHToolKit sharedToolkit] uiLabelAppearanceFeatured:[self IBOLabelStepsRemaining]]; 

CHToolkit是我的雜項任務創造了單。

而且,上述工作很好。但我必須這樣做,我需要一個具有自定義顏色的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中設置的任何顏色。

任何想法我做錯了什麼?

回答

3

這是因爲在init方法中沒有UI對象尚未初始化。你需要在awakeFromNib方法中完成。

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

或者您可以使用外觀。把它放在例如。 didFinishLaunchingWithOptions方法與您的子類:

[[CHLabel appearance] setTextColor:kColourDefaultAppColourText]; 
+0

非常感謝回覆如此迅速。我會給上述的一個去。 –

+0

嗨 - 太棒了。 awakeFromNib破解了它。我嘗試了AppDelegate的東西,但我認爲添加awakeFromNib是最好的,因爲它形成了對象實例代碼的一部分,並以適當的顏色影響了我的故事板上的每個UILabel。奇怪的是,我有一個合適的谷歌關於和搜索這個網站,但無濟於事。如果這個問題已被多次提出,我不會感到驚訝。感謝這兩個建議。 –

1

正確的方法是使用外觀代理。

您可以在這裏找到的文檔:https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAppearance_Protocol/index.html

要更改所有UILabels文本顏色,你可以使用

[[UILabel appearance] setTextColor: kColourDefaultAppColourText]; 

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

您還可以使用

當包含在特定的視圖控制器中時更改UILabel的外觀。

+0

有趣的 - 我也會給它一個去。 –

+0

我已經給你加票了,因爲你的建議可行,但接受user1963877的回答。 awakeFromNib感覺簡單,並且定位於它自己的對象子類。非常感謝,但。 –

+0

實際上,Apple提供的自定義UIKit控件的方法是使用外觀代理。你可以在這裏查看視頻:https://developer.apple.com/devcenter/download.action?path=/videos/wwdc_2012__hd/session_216__advanced_appearance_customization_on_ios.mov 它是從2012年,但你會得到想法 – elenag