cocoa - 在 Cocoa 应用程序中拖放期间未调用 NSView keyDown

标签 cocoa drag-and-drop nsview nswindow keydown

我有一个 cocoa 应用程序,我需要在拖动 session 期间响应 keyDown 事件,以便触发其他事情。这些键不仅仅是修饰符,还可以是任何类型的键。

问题是,当我通过调用 NSWindow.dragImage 启动拖动 session 时,在拖动操作期间我没有收到 keyDown 事件。当我将外部资源拖动到应用程序窗口(例如 Finder 中的文件)时,它工作正常, NSView.keyDown 被调用。

有什么办法可以解决这个问题吗?谢谢你!

最佳答案

这可能是因为拖动 session 使用“鼠标跟踪循环”来处理拖动事件。这有效地阻止了除拖动事件之外的所有其他事件发送到其目标。您可以在event documentation中阅读有关此内容的内容。 .

将项目拖动到应用程序上不会执行此操作的原因是,只有启动拖动 session 的应用程序被事件阻止,而不是接收拖放的应用程序。

话虽如此,您可以尝试使用 nextEventMatchingMask:untilDate:inMode:dequeue:mouseDragged 事件期间捕获 keyEvents,这应该允许您弹出任何事件队列中可能存在的关键事件。

还在上面链接的文档中,他们讨论了在鼠标拖动操作期间处理按键事件。但是,这些示例并不特别适合使用 dragImage:at:offset:event:pasteboard:source:slideBack: 启动拖动 session ,但您可以尝试将 performKeyEquivalent 观看为他们提到甚至查看 NSWindow 的 sendEvent: 是否在拖动 session 期间接收事件。

关于cocoa - 在 Cocoa 应用程序中拖放期间未调用 NSView keyDown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16736103/

相关文章:

objective-c - 调整大小和布局 : How to implement this design?

objective-c - 如何检测从另一个窗口拖动的窗口?

macos - 如何在响应者链中保持隐藏 View ?

macos - 如何将自定义 NSView 添加到 Window

objective-c - 使用属性字符串突出显示 NSStatusItem

objective-c - FSEvents:获取 fsevents_callback 内的受监控路径

wpf - 跨平台开发 - 使用跨平台 UI 工具包还是在多个平台上使用 native ?

python - PySide 如何在拖放时保持 QLabel 可见?

python - 在 wxPython 的面板之间拖动按钮

cocoa - 如何模仿Automator的工作流程 View ?