- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写我的第一个 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)的意义是什么。我的简单应用程序有它们吗?应该吗?
最佳答案
使用NSButton
的setKeyEquivalent:
方法或在界面构建器中为每个按钮设置等效键。
我不确定执行此操作的“正确”方法,但可以将自定义按键事件处理放入自定义窗口 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/
我试图在用户开始输入后将类(.active)添加到文本字段。我让它在某种程度上与以下代码一起工作,但由于某种原因,当用户开始键入时,.active 类不会立即应用,它仅在键入第二个字母后才应用。有什么
在 Mac 的 Chrome、Safari 和 Opera 上,正文实时绑定(bind)和文档 keydown 绑定(bind)均有效 $(document).ready(function() {
我使用 fancybox 来弹出表单,我的客户不希望背景应该滚动 Firefox 仍然允许用户通过箭头键滚动背景。 现在我阻止用户按箭头键直到弹出完整文档,但它也会停止我的表单中的相同按键。 这些选项
我有 UserControl 并面临 KeyDown 事件的问题。我的 UserControls 将显示反对撤销 Windows 窗体 keydown 事件,如下所示: 用户控件的事件: privat
我发现了很多相关问题(这里和其他地方),但还没有具体找到这个问题。 我正在尝试监听箭头键 (37-40) 的按键事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“按键”事件。 例子: http:/
JQuery 的“:not”选择器不会阻止要排除的类(装饰元素)触发 .keydown 事件。为什么? 在以下代码中,当我按下 .newOwnerEntryInput 字段中的某个键时,我希望仅看到“
在测试环境中,将vue-test-utils更新到1.0.0-beta.26或更高版本后,keydown事件不再由keyCode触发,例如: Vue 脚本 public onKeydown
据我了解,当按下键盘按钮时,它应该为具有焦点的控件调用 KeyDown 事件。然后,父控件的 KeyDown,依此类推,直到到达主窗体。除非 - 沿着链条,其中一个 EventHandlers 做了:
在 IE11 中,触发 keydown 事件有一种奇怪的行为。 请使用以下网址重现: http://jsfiddle.net/marbug/79dz6ajz/ 有一个带有两个输入字段的表单:
我有一个带有 3 个 NSTableViews 和 1 个 NSCollectionView 的窗口。集合 View 显示图像。我希望能够选择其中一个图像并使用键盘删除键将其删除,但我无法让 coll
我有一个WinForms表单(C#/。Net),它包含一个PictureBox,MenuStrip,Panel和两个Button控件。 我需要为整个窗口的箭头键检测KeyDown事件;即,当窗口位于前
我在使用 JQuery DataTable 捕获 keydown 事件时遇到问题。我的目标是允许用户使用箭头键导航表的行。因此,当用户按下箭头键时,我想捕获 keydown 事件并移动表的选定行(这是
我查看了一些相关问题,但没有一个能帮助我解决我的问题。 我有自己的从头开始构建的动态数据网格表单,可以在其中添加/删除数据行和字段列等。我正在尝试提高可用性,以便按回车键将创建一个新的字段列并且给予重
我试图通过按下来执行特定操作,例如空格键(任何地方)。在我的代码中,我有 AcceptFirstResponder 方法和 keyDown 方法,但我没有收到 NSLog 消息 代码如下: - (BO
我正在开发一个 Mozilla 插件,它将左侧的数字键替换为 Shift + 等效键。例如,如果您按 1,它将被替换为 '!'自动(特别适用于在线编译器)。这是代码 document.activeEl
我的表单具有以下语义结构 Sign Up Username
我正在尝试创建一个对象来处理用户的键盘输入。 var control = new Control (); function Control () { this.w = 0; this.
我编写了一个简单的代码,当按下某个键时,它应该改变框的可见性,但是出了问题,因为无论按下哪个按钮,它总是说它是错误的。 这应该只有在按下“f”键时才有效,现在根本不起作用...... const br
在我的代码中,用于提醒每个 keydown 事件上提交的所有文本区域行,但循环不起作用 function limitTextareaLine(e) { var textArray = $(this
我有一个用于捕获和注册箭头键输入的系统。它一直有效到一定程度。只要按下两个或更少的键,它就会正确记录同时按下多个键的情况。如果第三个或第四个按钮同时按下,它将停止触发按键事件。请参阅this jsFi
我是一名优秀的程序员,十分优秀!