我可以通過我的窗口控制器的keyDown:方法成功對鍵盤事件作出反應。
執行鼠標拖拽時出現問題:
鍵盤事件似乎被延遲,只會在鼠標上觸發。可可:拖動時不會觸發鍵盤事件(NSEventTrackingRunLoopMode)
要清楚,我的意思是:
•發生在你的窗控制器的KeyDown日誌聲明:(。上NSSlider爲前)方法
•啓動您的應用程序,執行一些拖放操作
•當保持拖動,按任意鍵:沒有任何記錄到控制檯。
•發佈拖動:日誌出現,耶...
我拖動的控件是一個自定義的NSSlider。
我已經實現了使用'鼠標跟蹤循環'方法的拖動機制。 據我所知,拖動時,NSApplication的主運行循環模式正在切換到NSEventTrackingRunLoopMode,從而限制傳入事件。
所以,我只是在我的跟蹤循環中添加NSKeyDownMask & NSKeyUpMask,並在遇到問題時調用self.nextResponder keyDown/up:方法。 我的問題是解決這個特定的自定義子類。
但可可的原生控件呢?我不能編碼異常...
我曾希望NSEvent的「addLocalMonitorForEventsMatchingMask:」方法 ,但唉,說doc:「不會調用嵌套的事件跟蹤循環消耗的事件,如控制跟蹤,菜單跟蹤或窗口拖動「。
因此,是否有一個簡單的解決方案來接收鍵盤事件,而不管應用程序的runloop模式?
我有一個類似的問題,當我使用「鼠標跟蹤循環」方法時,定時器似乎不會觸發 - 無論我將哪些運行循環模式添加到定時器。當頂級菜單被拉下時,定時器會啓動... - 所以在這方面的進展如何? –