如何在响应程序链中获取对象以处理`insertText:`消息?

时间:2009-03-25 11:32:03

标签: cocoa events

我有一个NSView子类,它实现了acceptsFirstResponderresignFirstResponderbecomeFirstResponder。它还实现了以下方法:

-(void)keyDown:(NSEvent *) event {
[self interpretKeyEvents:[NSArray arrayWithObject:event]]; }

我处理interpertKeyEvent:在appController类中发送的消息(appController是NSWindow委托,因此是响应者链的一部分。)

此方法适用于interpertKeyEvent:生成的大多数邮件,例如insertNewline:moveUp:moveDown:,但它不适用于insertText:。< / p>

如何在响应程序链中获取对象以处理insertText:消息?

2 个答案:

答案 0 :(得分:0)

根据文件,NSResponder的标准实施:

“NSResponder实现只是将此消息传递给下一个响应者,如果没有下一个响应者,则发出蜂鸣声。”

我想到了两种可能性:要么您的视图不在您希望它在响应者链中的位置,要么您的方法签名与预期的不匹配:

  • (无效)insertText:(ID)ASTRING

您如何实施acceptFirstResponder,resignFirstResponder和becomeFirstResponder?

您的应用程序是使用NSWindowControllers还是基于文档的应用程序?

有关事件处理架构的进一步文档:

http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW2

答案 1 :(得分:0)

您必须为您的类实现NSTextInput协议,然后将调用insertText。请查看Aquamacs中的nsterm.m,了解如何实现它。