2013-05-24 1 views
0

다른 것들을 트리거하기 위해 세션을 드래그하는 동안 keyDown 이벤트에 응답해야하는 코코아 애플리케이션이 있습니다. 키는 수정 자만이 아니라 모든 종류의 키가 될 수 있습니다.코코아 애플리케이션에서 드래그 앤 드롭 중에 NSView keyDown이 호출되지 않습니다.

문제는 NSWindow.dragImage를 호출하여 드래그 세션을 시작할 때 드래그 작업 중에 keyDown 이벤트가 발생하지 않는다는 것입니다. 외부 리소스를 애플리케이션 창 (예 : Finder의 파일)에 드래그하면 정상적으로 작동하며 NSView.keyDown이 호출됩니다.

이 문제를 해결할 방법이 있습니까? 감사합니다!

답변

0

이것은 드래그 세션이 '마우스 추적 루프'를 사용하여 드래그 이벤트를 처리하기 때문일 수 있습니다. 이는 드래그 이벤트를 제외하고 모든 다른 이벤트가 목표로 보내지는 것을 효과적으로 차단합니다. 여기에 대해서는 event documentation에서 확인할 수 있습니다.

앱에 항목을 드래그하지 않는 이유는 앱이 드래그 세션을 시작한 경우에만 이벤트가 차단되고 앱이 드롭을받지 않기 때문입니다.

nextEventMatchingMask:untilDate:inMode:dequeue:을 사용하여 mouseDragged 이벤트 중에 keyEvents를 캡처하면 이벤트 대기열에있을 수있는 모든 키 이벤트를 팝업 할 수 있습니다.

위에 링크 된 문서에서도 마우스 끌기 조작 중 주요 이벤트를 처리하는 방법에 대해 설명합니다. 그러나이 예는 dragImage:at:offset:event:pasteboard:source:slideBack:으로 끌기 세션을 시작할 때 특별히 적합하지 않지만 끌기 세션 중에 NSWindow의 sendEvent:이 이벤트를 수신하고있는 경우 보거나 심지어 보면서 performKeyEquivalent을 볼 수도 있습니다.

+0

답변 해 주신 라이언에게 감사드립니다. – vosc