NSTextField的文本更改通知

我想从这个问题的答案中使用代码: 如何观察NSTextField上的NSTextField 的值,以便观察NSTextField中存储的string的更改。

[[NSNotificationCenter defaultCenter] addObserverForName:NSTextViewDidChangeSelectionNotification object:self.textView queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note){ NSLog(@"Text: %@", self.textView.textStorage.string); }]; 

这里使用的类是一个NSTextView。 我在NSTextField中找不到NSTextViewDidChangeSelectionNotification的通知。

NSTextField中是否有可用的通知?

如果您只想检测文本字段的值何时发生更改,则可以使用NSTextFieldNSControlinheritance的controlTextDidChange: delegate方法。

只需将NSTextField文件中NSTextFielddelegate出口连接到控制器类,然后执行如下所示的操作:

 - (void)controlTextDidChange:(NSNotification *)notification { NSTextField *textField = [notification object]; NSLog(@"controlTextDidChange: stringValue == %@", [textField stringValue]); } 

如果以编程方式创buildNSTextField ,则可以在创build后使用NSTextField的setDelegate:方法来指定委托:

 NSTextField *textField = [[[NSTextField alloc] initWithFrame:someRect] autorelease]; [textField setDelegate:self]; // or whatever object you want 

授权是Cocoa使用的基本devise模式之一。 简而言之,它允许您轻松地自定义标准对象(在这种情况下为用户界面对象)的行为,而不需要将对象的子类添加到其他行为中。 例如,检测文本字段中的文本何时发生更改的另一个较低级别的方法可能是创build您自己的自定义NSTextField子类,其中您重写了NSTextFieldNSResponderinheritance的keyDown:方法。 但是,这样的子类很困难,因为它可能要求您对对象的inheritance层次有深入的了解。 有关更多信息,请务必查看以下内容:

cocoa基本指南:代表和数据源

关于什么id <NSTextFieldDelegate>表示:它意味着一个通用对象( id ),它声明自己符合<NSTextFieldDelegate>协议。 有关协议的更多信息,请参阅Objective-C编程语言:协议 。

https://github.com/NSGod/MDControlTextDidChange处示例GitHub项目;

我相信你想要阅读的字段编辑器本质上是一个(隐藏的) NSTextView处理文本input到给定窗口中的所有NSTextField 。 关于“使用与现场编辑器的授权和通知”部分应该指向正确的方向。

在Swift中

 public override func controlTextDidChange(_ obj: Notification) { }