我正在编写我的第一个 Cocoa 应用程序。这是一个简单的实用程序——一个计算器。我已经完成了所有工作,我最不想添加的是我希望应用程序响应按键事件。因此,您可以用鼠标单击“4”按钮,也可以直接按键盘上的“4”键。我正在阅读所有的事件处理文档,但我没有采用推荐的方法来获取处理事件的 NSResponder(或 NSView)。
我可以创建一个 NSWindow 的子类并告诉界面构建器创建该类型的主窗口。然后,当我在我的新 NSWindow 子类中覆盖 keyDown 消息时,它会获取事件,但我不确定如何将它连接到我的应用程序委托类(因为我基本上只想打开按下的键并调用相应的消息在按钮“选择”操作目标的委托中。
或者,我想我听说过通过将应用程序委托类的超类从 NSObject 更改为 NSView 或 NSResponder 或其他东西来做到这一点。我并没有过多地探讨这个想法,但我不确定如何实际获取应用程序委托对象,然后实际设置为第一响应者(我认为这就是我想要做的)。
所以,我希望有人能给我关于如何/在哪里实现我的 keyDown 方法的具体指导,但我也想了解推荐的“最佳实践”是什么。苹果会说什么是做这件事的正确架构?我对学习如何使这项工作像学习其背后的 Apple 设计模式一样感兴趣。
我的程序结构如下:我有一个 nib 文件(实际上是一个 .xib),我在其中设计了一个带有用于显示的文本框和几个按钮的窗口。我已经将出口和操作从那里注册到 AppDelegate 类(标准项目模板为您设置的类)。遵循 MVC 模式,然后我有一个 AppDelegate 初始化的 Calculator 类,并且计算器的所有实际逻辑都在该类中。AppDelegate 基本上只是响应来自按钮的消息,将它们传递给 Calculator 类中的方法,然后向 Calculator 询问当前显示值并将其更新回文本框。因此,我的 nib 文件中的图形元素是“视图”,AppDelegate 是“控制器”,Calculator 类是“模型”。正确的?
那么,谁应该处理 keyDown 事件呢?似乎视图应该捕获它们并将它们发送到控制器,但是我该如何设置呢?
我想一个可能相关的问题是我已经看到提到“窗口控制器”和“视图控制器”类。我不确定我是否理解这些课程的意义。我的简单应用程序有吗?应该是?