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