我正在制作一个“LearnToTypeQuick”应用程序,因此我需要验证我的键盘按键,看看它们是否与我在 View
上打印的内容匹配。
我想在我的 ViewController
中使用 keyDown
事件,因此我需要 ViewController
成为第一响应者。
我的问题是:我该怎么做?
最佳答案
I would like to use the keyDown event in my ViewController and therefore i need the ViewController to become first responder.
您可能实际上并不需要它。响应者链的全部要点是,如果一个响应者不处理给定的消息,它会将消息传递给链中的下一个响应者,依此类推。因此,您真正需要的只是让您的 View Controller 位于响应者链中,并确保其前面的任何响应者不会处理您感兴趣的消息。
当然,另一种策略是将键处理代码移动到适当的 View 中,并让该 View 根据需要向委托(delegate)(可以是 View Controller )发送消息。这可以为您节省一些更新用户正在输入的 View 等方面的工作,并且可能更符合典型的应用程序设计。
此策略的一个非常简单的实现是让用户在普通的旧 NSTextView
中键入内容。许多打字程序向用户显示一些段落,并让用户将该段落键入某种文本编辑字段。您可以将 View Controller 设置为文本字段的委托(delegate)。 NSTextView
提供的委托(delegate)消息之一是 -textDidChange:
,因此您可以在 View Controller 中实现它(以及采用 NSTextViewDelegate
> View Controller 声明中的协议(protocol))。如果您随后将 View Controller 设置为 TextView 的委托(delegate),则每次 View 中的文本发生更改时, TextView 都会发送 -textDidChange:
消息。然后,您可以将 View 中的文本与模型文本进行比较,并突出显示任何不匹配的地方,以便用户可以看到他/她犯了错误。
如果您确实希望 View Controller 成为第一响应者,那么没有什么可以阻止您这样做。您可以重写 -acceptsFirstResponder
使其返回 YES,然后向您的 View Controller 发送 -becomeFirstResponder
消息。
您可以阅读有关 responder chain 的更多信息和 how key events are handled在Cocoa 事件处理指南中。
关于cocoa - 如何让ViewController成为第一响应者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29197751/