【发布时间】:2012-06-10 20:28:17
【问题描述】:
我正在编写我的第一个 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 事件?看起来视图应该捕获它们并将它们发送到控制器,但是我该如何设置呢?
我想一个可能相关的问题是我已经看到提到“窗口控制器”和“视图控制器”类。我不确定我是否理解这些课程的意义。我的简单应用程序有吗?应该吗?
【问题讨论】:
标签: macos cocoa design-patterns keydown cocoa-design-patterns