0

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

问题是,当我通过调用 NSWindow.dragImage 开始拖动会话时,在该拖动操作期间我没有得到 keyDown 事件。当我将外部资源拖入/拖入应用程序窗口(例如,来自 Finder 的文件)时,它工作正常,调用 NSView.keyDown。

有没有办法解决这个问题?谢谢!

4

1 回答 1

1

这可能是因为拖动会话使用“鼠标跟踪循环”来处理拖动事件。这有效地阻止了所有其他事件被发送到它们的目标,除了拖动事件。您可以在活动文档中阅读有关此内容的信息。

将项目拖到您的应用程序不这样做的原因是,只有启动拖动会话的应用程序被事件阻止,而不是接收拖放的应用程序。

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

同样在上面链接的文档中,他们讨论了在鼠标拖动操作期间处理键事件。但是,这些示例在启动拖动会话时并不特别适合,dragImage:at:offset:event:pasteboard:source:slideBack:但您可以尝试观看performKeyEquivalent他们提到的内容,甚至查看 NSWindowsendEvent:是否在拖动会话期间接收事件。

于 2013-05-24T18:37:12.923 回答