2009-09-11 48 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