如何使ViewController第一响应者?

时间:2015-03-22 17:48:59

标签: cocoa swift keydown appkit

我正在制作一个" LearnToTypeQuick"应用程序,因此我需要验证我的键盘按下,以查看它们是否与我在view上打印的内容相匹配。

我想在keyDown中使用ViewController事件,因此我需要ViewController成为第一响应者。

我的问题是:我该怎么做?

1 个答案:

答案 0 :(得分:2)

  

我想在我的ViewController中使用keyDown事件,因此我需要ViewController成为第一响应者。

你可能实际需要它。响应者链的重点是,如果一个响应者没有处理给定的消息,它会将消息传递给链中的下一个响应者,依此类推。因此,您真正需要的是让您的视图控制器响应者链中,并确保其前面的任何响应者都不会处理您感兴趣的消息。< / p>

当然,另一种策略是将密钥处理代码移动到适当的视图中,并使该视图根据需要向委托(可以是视图控制器)发送消息。这可以在更新用户输入的视图等方面为您节省一些工作,并且它可能更符合典型的应用程序设计。

此策略的一个非常简单的实现是将用户键入普通的旧NSTextView。许多打字程序向用户显示一些段落并让用户键入到某种文本编辑字段的段落。您可以将视图控制器设置为文本字段的委托。 NSTextView提供的代理邮件之一是-textDidChange:,因此您需要在视图控制器中实现该代理邮件(以及在视图控制器中采用NSTextViewDelegate协议&#39;}宣言)。如果您随后将视图控制器设置为文本视图的委托,则每次视图中的文本发生更改时,文本视图都会发送-textDidChange:条消息。然后,您可以将视图中的文本与模型文本进行比较,并突出显示任何不匹配,以便用户可以看到他/她犯了错误。

如果你真的希望你的视图控制器成为第一个响应者,那么就没有什么可以阻止你这样做了。您可以覆盖-acceptsFirstResponder以使其返回YES,然后向视图控制器发送-becomeFirstResponder消息。

您可以在 Cocoa事件处理指南中详细了解responder chainhow key events are handled