【问题标题】:Updating UI Elements with Controller Constructor使用控制器构造函数更新 UI 元素
【发布时间】:2009-09-11 19:47:56
【问题描述】:

我在一个窗口上有一个 NSSlider(滑块)和一个 NSLabel(标签)。我还有一个“控制器”类,它会在滑块的值发生更改时更新标签。

滑块的默认位置是 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

在控制台中,我看到文本“正在初始化...”,但标签从未更新。我错过了什么?

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    控制器可能正在初始化(您在哪里调用[super init]?),但这并不意味着插座已连接。正确的方法是依赖 viewDidLoad、windowDidLoad 或 awakeFromNib 方法。

    【讨论】:

    • 实现 awakeFromNib 就成功了。谢谢!这是 IB 控制的常见做法吗?初始化对象时我总是调用 [super init] 吗?这类似于 C# 中的 :base() 吗?我对 obj-c 很陌生!
    • awakeFromNib 是一种在从 nib 文件实例化的对象上自动调用的方法,因此是为您的 UI 设置初始值的好地方。至于[super init],看看这个问题:stackoverflow.com/questions/1341734
    【解决方案2】:

    您应该通过绑定来实现这一点,并且控制器中没有任何“胶水代码”。

    这里有一些关于如何使用它们的参考:http://cocoadevcentral.com/articles/000080.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 2011-05-21
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多