在我的Mac App中,我聽取按鍵事件並將它們傳遞給內部客戶端,具體取決於修飾符和關鍵代碼。NSView無法抓取Ctrl + Tab Keydown事件
目前,我面臨的問題是,我無法保持「Ctrl + Tab」事件。看起來,「應用程序」本身試圖處理這個問題,這對基於標籤的應用程序是有意義的。所以我禁用Tabbingmode,但仍然,Ctrl + Tab永遠不會觸發KeyDown事件。關鍵代碼和修飾符的任何其他組合似乎都可以通過。
有關如何獲取Ctrl + Tab觸發按鍵事件的任何建議?
在我的Mac App中,我聽取按鍵事件並將它們傳遞給內部客戶端,具體取決於修飾符和關鍵代碼。NSView無法抓取Ctrl + Tab Keydown事件
目前,我面臨的問題是,我無法保持「Ctrl + Tab」事件。看起來,「應用程序」本身試圖處理這個問題,這對基於標籤的應用程序是有意義的。所以我禁用Tabbingmode,但仍然,Ctrl + Tab永遠不會觸發KeyDown事件。關鍵代碼和修飾符的任何其他組合似乎都可以通過。
有關如何獲取Ctrl + Tab觸發按鍵事件的任何建議?
在我的測試中,NSView
的-keyDown:
方法似乎沒有在控制標籤鍵事件的NSView
子類上調用。但是,您可以用NSApplication
子類在應用層面攔截下來:
@interface MyApplication: NSApplication
@end
@implementation MyApplication
- (void)sendEvent:(NSEvent *)event {
if (event.type == NSEventTypeKeyDown &&
[event.charactersIgnoringModifiers isEqualToString:@"\t"] &&
(event.modifierFlags & NSEventModifierFlagDeviceIndependentFlagsMask) == NSEventModifierFlagControl) {
NSLog(@"ctrl-tab");
}
[super sendEvent:event];
}
@end
這將是一個非常糟糕的主意,除非你想在關注的視圖對象頂部的任何位置的關鍵事件。 –
您需要添加代碼以檢查應處理事件時的正確條件,並在其餘時間調用超級實現,是的。這很簡單,但它是我發現捕獲OP想要捕獲的按鍵的唯一方式。 –
感謝您使用此解決方案。它指出我正確的方向。有趣的是,我必須重寫NSWindow才能在我的NSView中獲得keyDown事件,而實際上我的情況是NSWindowDelegate。看起來像鏈中的所有實例都試圖避免Ctrl + Tab。 – Steve
使用NSEventModifierFlags。 –