2012-10-07 75 views
0

我有一個包含兩個UILabel的自定義視圖。我想在使用initWithCoder方法的時候自定義它們的字體。如何在View的initWithCoder方法中訪問子視圖

@implementation HomeTitleView 
@synthesize ticketLabel; 
@synthesize monthLabel; 

- (id) initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [monthLabel setFont:[UIFactory getFontForKey:@"home_month"]]; 
     [ticketLabel setFont:[UIFactory getFontForKey:@"home_ticket"]]; 
    } 
    return self; 
} 

@end 

不幸的是,這沒有奏效。使用調試器,我發現monthLabel和ticketLabel都是零。任何人都有想法我該如何解決這個問題?我應該實施什麼回調或方法,以便我可以訪問我的兩個標籤?

回答

5

你不能那樣做。這些觀點尚不存在。當調用loadView方法時,它們會被實例化,當第一次訪問view屬性時會自動發生。如果要在裝入視圖後操作視圖,則要使用的正確方法是viewDidLoad

編輯:假設您正在使用UIViewController類。如果您正在使用UIView課程,則可以使用awakeFromNibdidAddSubview:

+0

我該怎麼做?我的customview擴展了UIView,它沒有viewDidLoad回調。或者我應該在ViewDidLoad的視圖控制器,我想添加此自定義視圖? –

+0

我現在可以想到的另一種可能的解決方案是創建一個自定義的UILabel類,我可以在它的init方法中配置外觀和感覺......但是如果可能,我不想這樣做:( –

+0

對不起,我以爲你在談論一個'UIViewController'子類,我已經更新了我的答案,以包含'UIView'子類的信息 – Jim

0

您是否曾將monthLabel和ticketLabel分配給UILabel?例如:

self.monthLabel = [[[UILabel alloc] init] autorelease]; 
self.ticketLabel = [[[UILabel alloc] init] autorelease]; 

如果是這樣,你可以更新您的文章的代碼?

+0

如果指定的初始化程序是'initWithCoder:',那麼這意味着他使用了一個筆尖或故事板 - 當該文件中的對象被反序列化時,這些視圖將被實例化。 – Jim

+0

是的,@Jim是對的。我在用筆尖。 –

相關問題