2009-09-11 27 views
0

我在窗口上有一個NSSlider(滑塊)和一個NSLabel(標籤)。我也有一個類「控制器」,每當滑塊的值發生變化時都會更新標籤。用控制器構造函數更新UI元素

滑塊的默認位置是0.5,我想要得到的是控制器的構造函數在程序啓動時更新標籤的位置。

以下是我嘗試這樣做的實現文件。一切工作正常,除了標籤始終爲0時,我開始程序。

@implementation Controller 
{ 

} 

-(id)init 
{ 
    NSLog(@"initializing..."); 
    [self updateLabel];  
    return self; 
} 

- (IBAction)sliderChanged:(id)sender 
{ 
    [self updateLabel]; 
} 

- (void)updateLabel 
{ 
    label.text = [NSString stringWithFormat:@"%.1f", slider.value]; 
} 

@end 

在控制檯中,我看到文本「initializing ...」,但標籤從不更新。我錯過了什麼?

回答

2

該控制器可以得到初始化(?這裏是你的[super init]調用),但是,這並不意味着出口都連接起來。正確的方法是依靠viewDidLoad,windowDidLoad或awakeFromNib方法。

+0

實現awakeFromNib有竅門。謝謝! IB控制的常見做法是什麼? 初始化對象時是否總是調用[super init]?這與C#中的base()類似嗎?我對obj-c很陌生! – bufferz 2009-09-11 20:19:55

+1

'awakeFromNib'是一個從nib文件實例化的對象上自動調用的方法,因此是爲您的UI設置初始值的好地方。至於'[super init]',看看這個問題:http://stackoverflow.com/questions/1341734 – 2009-09-11 20:47:40