2014-01-28 23 views
1

我正在尋找攔截命令組合鍵,並認爲IMKit將是一個不錯的選擇。通過擴展IMKInputController,我可以攔截大多數鍵,但它似乎忽略了修改的鍵。IMKit的攔截命令+鍵(或類似的)

我試圖重寫

-(BOOL)inputText:(NSString*)string client:(id)sender; 

和(或者)

-(BOOL)inputText:(NSString*)string 
      key:(NSInteger)keyCode 
     modifiers:(NSUInteger)flags 
      client:(id)sender; 

,但沒有運氣;當應用修飾符時,不會調用純粹的方法。更具體地說,commandalt鍵不會被上面的方法所捕獲。簡單修飾符如shiftctrl工作(並在第二種方法中設置修飾符flags變量)。啓動Apple的示例應用程序NumberInput以親自查看。

有什麼建議嗎?我完全錯誤的軌道?

+0

會發生什麼,他們不叫? 「沒有運氣」有點含糊...... –

+0

更新............. – Toby

回答

1

簡短的回答:

使用handleEvent:client:,聽NSFlagsChanged事件。


IMKInputController實現IMKServerInput Protocol,它提供了三種選擇來處理事件。

  1. 鍵綁定 - 僅使用inputText:client:didCommandBySelector:client:
  2. 文本數據 - 使用inputText:key:modifiers:client:
  3. 處理所有事件 - 使用handleEvent:client:

好像你只嘗試了前兩名。您可以通過第三個選項達到目標。

嘗試以下方法:

  1. 倍率recognizedEvents:(從IMKStateSetting Protocol

    - (NSUInteger)recognizedEvents:(id)sender 
    { 
        return NSKeyDownMask | NSFlagsChangedMask; 
    } 
    
  2. 並使用handleEvent:client:

    -(BOOL)handleEvent:(NSEvent*)event client:(id)sender 
    { 
        NSLog(@"handling event: %@", event); 
        return false; 
    } 
    

您可以在控制檯的每個keydown和修飾符的鍵盤上看到打印輸出,其中包括commandalt

+0

測試這個,在'recognisedEvents:'中設置'NSKeyUpMask'仍然不能捕獲'NSKeyUp'類型的事件。認爲這將是解決這個問題,但顯然不是:http://stackoverflow.com/questions/23620864/imkit-to-catch-nskeyup-event – pkamb