我正在编写我的第一个Cocoa应用程序。这是一个简单的实用程序 - 一个计算器。我有一切工作,我想补充的最后一件事是我希望应用程序响应按键事件。所以,你可以用鼠标点击“4”按钮,或者你可以按下键盘上的“4”键。我正在阅读所有事件处理文档,但我没有采用推荐的方法来获取处理事件的NSResponder(或NSView)。响应keyDown事件的最佳做法
我可以做一个NSWindow的子类并告诉界面生成器制作该类型的主窗口。然后,当我重写新的NSWindow子类中的keyDown消息时,它获取事件,但我不确定如何将它连接到我的应用程序委托类(因为我基本上只想打开按下的键并调用相应的消息在代理中,按钮“选择”动作的目标。
或者,我想我通过将应用程序委托类的超类从NSObject更改为NSView或NSResponder或其他东西,但是我不确定如何真正获得应用程序委托对象,然后实际设置为第一响应者(我认为这就是我想要做的事情)
所以,我是希望有人能给我具体的方向,说明我应该如何/在哪里实施我的keyDown m方法,但我也想了解推荐的“最佳实践”是做什么的。苹果会说什么是这样做的正确架构?我对学习如何使这项工作学习苹果设计模式感兴趣。
我的程序结构如下: 我有一个笔尖文件(实际上是一个.xib),我用我的窗口设计了一个文本框来显示和一个按钮。我已经从那里注册了出口和动作到AppDelegate类(标准项目模板为您设置的那个)。遵循MVC模式,我有一个AppDelegate初始化的Calculator类,并且计算器的所有实际逻辑都在该类中。 AppDelegate基本上只响应来自按钮的消息,将它们传递给Calculator类中的方法,然后向计算器请求当前显示值并将其更新回到文本框中。所以,我的笔尖文件中的图形元素是“视图”,AppDelegate是“控制器”,Calculator类是“模型”。对?
那么,谁应该处理keyDown事件?似乎视图应该捕获它们并将它们发送给控制器,但我该如何设置它?
我想一个潜在的相关问题是,我已经看到“窗口控制器”和“视图控制器”类的提及。我不确定我是否明白这些课程的重点。我的简单应用程序有他们吗?应该是?
谢谢,这听起来像是我的具体问题的最佳答案。我仍然对我的更一般问题的答案感到好奇,那就是什么正确的设计模式用于覆盖keyDown方法。 –
P.S.这解决了几乎所有的按钮。我正在制作一个“程序员计算器”,所以我的一些按钮是两个字符运算符,如“<<”。所以,我要自定义我的keyDown方法来检测连续的两个字符。我也想通过输入所有作为命令粘贴到计算器的字符来响应粘贴,以便复制和粘贴表达式来获得计算结果 - 但是我认为使用复制和粘贴是完全不同的野兽。 –
查看答案编辑。 – spudwaffle