我有一个可可应用程序,我需要在拖动会话期间响应keyDown事件,以便触发其他事件。键不仅仅是修饰符,还可以是任何类型的键。
问题是,当我通过调用NSWindow.dragImage启动拖动会话时,在拖动操作过程中不会获得keyDown事件。当我将外部资源拖放到应用程序窗口中(例如,来自查找器的文件)时,它工作得很好,NSView.keyDown被调用。
有什么办法可以绕过这个问题吗?谢谢你!
发布于 2013-05-25 02:37:13
这可能是因为拖动会话正在使用“鼠标跟踪循环”来处理拖动事件。这将有效地阻止将除拖动事件之外的所有其他事件发送到其目标。您可以在event documentation中了解到这一点。
将项目拖到您的应用程序上的原因不是因为只有启动拖动会话的应用程序会被事件阻止,而不是接收拖放的应用程序。
话虽如此,您可以尝试在mouseDragged事件期间使用nextEventMatchingMask:untilDate:inMode:dequeue:捕获keyEvents这应该允许您弹出事件队列中可能存在的任何关键事件。
此外,在上面链接的文档中,他们还讨论了在鼠标拖动操作期间处理按键事件。但是,当使用dragImage:at:offset:event:pasteboard:source:slideBack:启动拖动会话时,这些示例并不特别适合,但您可以尝试查看performKeyEquivalent,甚至查看在拖动会话期间,NSWindow的sendEvent:是否正在接收事件。
https://stackoverflow.com/questions/16736103
复制相似问题