macos – 响应keyDown事件的最佳实践

前端之家收集整理的这篇文章主要介绍了macos – 响应keyDown事件的最佳实践前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写我的第一个 Cocoa应用程序.这是一个简单的实用程序 – 计算器.我已经完成了所有工作,我想要添加的最后一件事是我希望应用程序响应关键的新闻事件.因此,您可以使用鼠标单击“4”按钮,也可以按键盘上的“4”键.我正在阅读所有事件处理文档,但我没有采用推荐的方法获取处理事件的NSResponder(或NSView).

我可以创建NSWindow的子类,并告诉界面构建器创建该类型的主窗口.然后,当我在我的新NSWindow子类中覆盖keyDown消息时,它获取事件,但我不知道如何将它连接到我的应用程序委托类(因为我基本上只想打开按下的键并调用相应的消息在代表中按钮“选择”动作的目标.

或者,我想通过将应用程序委托类的超类从NSObject更改为NSView或NSResponder等,我听到了这样做.我没有太多讨论这个想法,但我不确定如何实际获得应用程序委托对象然后实际设置为第一响应者(我认为这是我想要做的).

所以,我希望有人可以就如何/在哪里实现我的keyDown方法给出具体指示,但我也想了解推荐的“最佳实践”是做什么的. Apple会说这是正确的架构吗?我很有兴趣学习如何使这项工作学习它背后的Apple设计模式.

我的程序结构如下:
我有一个nib文件(实际上是.xib),我设计了一个带有文本框的窗口,用于显示和一个按钮.我已经在那里注册了AppDelegate类的插座和操作(标准项目模板为你设置的那个).遵循MVC模式,然后我有一个AppDelegate初始化的Calculator类,计算器的所有实际逻辑都在该类中. AppDelegate基本上只响应来自按钮的消息,将它们传递给Calculator类中的方法,然后向Calculator询问当前显示值并将其更新回到文本框中.因此,我的nib文件中的图形元素是“视图”,AppDelegate是“控制器”,而Calculator类是“模型”.对?

那么,谁应该处理keyDown事件?看起来像视图应该捕获它们并将它们发送到控制器,但我该如何设置它?

我想一个可能相关的问题是我看过“窗口控制器”和“视图控制器”类的提及.我不确定我明白这些课程的重点是什么.我的简单应用程序有它们吗?应该是?

解决方法

使用NSButton的setKeyEquivalent:方法或为接口构建器中的每个按钮设置等效键.

我不确定“正确”的方法,但自定义键事件处理可以放在自定义窗口contentView中,如下所示:

- (void)keyDown:(NSEvent *)theEvent {
    NSLog(@"keyDown:%@",theEvent);

    //Put event handling code here.

    [super keyDown:theEvent];
}

- (BOOL)acceptsFirstResponder {
    return YES;
}

如果有人知道这样做的正确方法,请随意加入.

猜你在找的cocoa相关文章