창에 NSSlider (슬라이더)와 NSLabel (레이블)이 있습니다. 슬라이더의 값이 변경 될 때마다 레이블을 업데이트하는 클래스 "Controller"도 있습니다.컨트롤러 생성자로 UI 요소 업데이트
슬라이더의 기본 위치는 0.5입니다. Controller의 생성자가 프로그램 시작시 레이블을 업데이트하는 위치를 얻으려고합니다.
다음은이를 수행하기위한 구현 파일입니다. 프로그램을 시작할 때 라벨이 항상 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
콘솔에 "초기화 중 ..."이라는 텍스트가 표시되지만 레이블이 업데이트되지 않습니다. 내가 뭘 놓치고 있니?
awakeFromNib을 구현하는 것이 트릭입니다. 감사! IB 컨트롤에 대한 일반적인 관행입니까? 개체를 초기화 할 때 항상 [super init]을 호출합니까? 비슷합니다 : base() in C#? 나는 obj-c에 아주 새로운 것이다! – bufferz
'awakeFromNib'는 nib 파일에서 인스턴스화 된 객체에서 자동으로 호출되는 메서드이므로 UI의 초기 값을 설정하기에 좋습니다. '[super init]'에 관해서는 다음 질문을 확인하십시오 : http://stackoverflow.com/questions/1341734 –