NSTextField委托通知 - 如何获取文本?

时间:2011-05-11 19:03:05

标签: objective-c cocoa delegates notifications nstextfield

我一直在努力学习使用Xcode,但我对如何注册NSTextField已经改变感到困惑。基本上,我有一个NSTextField和一个按钮。单击该按钮可以显示字段中的文本。但是,我希望能够获取该字段的文本,而无需使用文本字段“操作:发送结束编辑”。也就是说,我希望能够输入文本并立即按下按钮,而无需按文本框中的输入或标签。看起来这样做的方法是为我的NSTextField设置一个响应

的委托。
- (void)controlTextDidChange:(NSNotification *)aNotification

但我不明白如何获取已输入的文本。我认为它与

有关
[[aNotification userInfo] valueForKey:@"NSFieldEditor"];

但我真的不知道从哪里去。

3 个答案:

答案 0 :(得分:10)

你走在正确的轨道上!您从通知的用户信息词典中获取的对象是Field Editor,它只是NSTextView,它代表文本字段处理文本输入。

一旦你拥有了这个对象,你所要做的就是向它询问textStorage,它是一个持有文本的NSTextStorage *对象。反过来,该对象的string是一个普通的NSString,仅包含字符。

NSTextView * fieldEditor = [[aNotification userInfo] objectForKey:@"NSFieldEditor"];
NSString * theString = [[fieldEditor textStorage] string];

* NSAttributedString的子类,它是一个包含字符串和相关“属性”(如颜色,字体和下划线)的对象。

答案 1 :(得分:2)

在按钮操作方法中,只需读取文本字段中的当前字符串值:

- (IBAction)didClickTheButton:(id)sender {

    NSString* theString = [myTextField stringValue];

    // do something with theString

}

答案 2 :(得分:0)

如果您只处理单个文本字段,则可能更简单:

- (void)controlTextDidChange:(NSNotification *)obj {
    [self.inputField stringValue];
}

我完全忽略了NSText和诸如此类的所有复杂细节,只是使用了发送通知的简单性以及从文本字段中获取字符串值的简单性。