2017-08-28 92 views
0

在我的Mac App中,我聽取按鍵事件並將它們傳遞給內部客戶端,具體取決於修飾符和關鍵代碼。NSView無法抓取Ctrl + Tab Keydown事件

目前,我面臨的問題是,我無法保持「Ctrl + Tab」事件。看起來,「應用程序」本身試圖處理這個問題,這對基於標籤的應用程序是有意義的。所以我禁用Tabbingmode,但仍然,Ctrl + Tab永遠不會觸發KeyDown事件。關鍵代碼和修飾符的任何其他組合似乎都可以通過。

有關如何獲取Ctrl + Tab觸發按鍵事件的任何建議?

+0

使用NSEventModifierFlags。 –

回答

1

在我的測試中,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 
+0

這將是一個非常糟糕的主意,除非你想在關注的視圖對象頂部的任何位置的關鍵事件。 –

+0

您需要添加代碼以檢查應處理事件時的正確條件,並在其餘時間調用超級實現,是的。這很簡單,但它是我發現捕獲OP想要捕獲的按鍵的唯一方式。 –

+0

感謝您使用此解決方案。它指出我正確的方向。有趣的是,我必須重寫NSWindow才能在我的NSView中獲得keyDown事件,而實際上我的情況是NSWindowDelegate。看起來像鏈中的所有實例都試圖避免Ctrl + Tab。 – Steve