gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:14:32 25 4
gpt4 key购买 nike

我正在编写我的第一个 Cocoa 应用程序。这是一个简单的实用应用程序——计算器。我已经让一切正常工作,我想添加的最后一件事是我希望应用程序响应按键事件。因此,您可以用鼠标单击“4”按钮,也可以直接按键盘上的“4”键。我正在阅读所有事件处理文档,但我没有采用推荐的方法来获取处理事件的 NSResponder (或 NSView)。

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

或者,我想我听说过通过将应用程序委托(delegate)类的父类(super class)从 NSObject 更改为 NSView 或 NSResponder 等来做到这一点。我没有太多地探讨这个想法,但我不确定如何实际获取应用程序委托(delegate)对象,然后实际设置为第一响应者(我认为这就是我想要做的)。

所以,我希望有人能给我关于如何/在哪里实现 keyDown 方法的具体指示,但我也想了解推荐的“最佳实践”是什么。苹果认为执行此操作的正确架构是什么?我对学习如何实现这项工作和学习其背后的 Apple 设计模式一样感兴趣。

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

那么,谁应该处理 keyDown 事件?看起来 View 应该捕获它们并将它们发送到 Controller ,但我该如何设置呢?

我想一个潜在的相关问题是我看到了“窗口 Controller ”和“ View Controller ”类的提及。我不确定我是否理解这些类(class)的意义是什么。我的简单应用程序有它们吗?应该吗?

最佳答案

使用NSButtonsetKeyEquivalent:方法或在界面构建器中为每个按钮设置等效键。

我不确定执行此操作的“正确”方法,但可以将自定义按键事件处理放入自定义窗口 contentView 中,如下所示:

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

//Put event handling code here.

[super keyDown:theEvent];
}

- (BOOL)acceptsFirstResponder {
return YES;
}

如果有人知道这样做的正确方法,请随时插话。

关于macos - 响应 keyDown 事件的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com