NSNotification/绑定?

Posted

技术标签:

【中文标题】NSNotification/绑定?【英文标题】:NSNotification/Bindings? 【发布时间】:2009-06-04 16:22:38 【问题描述】:

我正在阅读希尔格拉斯和科昌的书籍。做我自己的实验以进一步学习我只是想创建一个带有 4 个文本字段的可可界面,其中 3 个接受数字,第 4 个显示其他 3 个的总和。我可以使用按钮来进行计算,但是我想要做的是在 3 个输入之一发生更改时让它自动更新。

我已经在书本和在线上寻找了涵盖这一点的课程,但找不到,所以要么它真的很简单,但我遗漏了一些东西,要么它不是那么简单。执行此操作的传统方式似乎是使用 NSNotifactions,但也可能使用绑定?

可可的标准做法是什么?有没有人知道的教程?

干杯, 摩根

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

感谢代码示例!非常感激。我会研究KVC的东西。干杯!摩根 @phi 正是我要找的,感谢代码示例。【参考方案2】:

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

【讨论】:

以上是关于NSNotification/绑定?的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中NSNotification的便利使用

iOS开发中NSNotification的便利使用

iOS开发中NSNotification的便利使用

NSNotification消息

NSNotification 'object' 和 'userInfo' 有啥区别?

Delegate/Block/NSNotification与多线程