NSNotification /绑定?

时间:2009-06-04 16:22:38

标签: objective-c cocoa

我正在通过Hilgrass和Kochan书籍。做我自己的实验以进一步学习我只想创建一个包含4个文本字段的cocoa界面,3个接受数字的第4个和显示其他3个总和的第4个。我可以使用按钮进行计算然而我是什么想要做的就是在3个输入中的一个被改变时随时自动更新。

我已经找到了一个涵盖这一点的课程,无论是在书本还是在线,但找不到一个,所以要么它非常简单,要么我缺少某些东西,或者它不是那么简单。这样做的传统方式似乎是使用NSNotifactions,但也可能使用绑定吗?

这样做的标准方法是cocoa,有没有人知道的教程?

干杯, 摩根

2 个答案:

答案 0 :(得分:3)

第7章:键值编码; Hilgrass“Mac OS X的可可编程”或Apple documentation on Key-Value Coding的键值观察可以帮助您完成这项任务。

以下是我的示例xcode项目:http://dl.getdropbox.com/u/344540/stackoverflow/AutoAdd.zip。您可以使用Interface Builder中的NSTextFields的Inspector的“Bindings”选项卡来控制更新的发生方式。该标签中还有其他宝石。

答案 1 :(得分:0)

NSControl(以及NSTextField)有一个通知NSControlTextDidChangeNotification,只要文本发生变化就会发送。

因此,您可以在三个文本字段中注册该通知,然后更新您的计算字段。

我更进一步,创建了一个名为ActionOnChangeTextField的NSTextField子类,它会在文本发生变化时自动调用其动作。因此,您只需将三个文本字段的类设置为ActionOnChangeTextField,并将选择器连接到更新计算方法。

@interface ActionOnChangeTextField : NSTextField {

}

@end

@implementation ActionOnChangeTextField

- (void) doTextChangedAction:(NSNotification*)notification;
{
    [[self target] performSelector:[self action]];
}

- (void) awakeFromNib;
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(doTextChangedAction:)
                                                 name:NSControlTextDidChangeNotification
                                               object:self];
}

- (void) dealloc;
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

@end