我正在寻找拦截 Command 组合键,并认为 IMKit
将是一个不错的选择。通过扩展 IMKInputController
我可以拦截大多数键,但它似乎会忽略修改过的键。
我尝试过覆盖
-(BOOL)inputText:(NSString*)string client:(id)sender;
和(或者)
-(BOOL)inputText:(NSString*)string
key:(NSInteger)keyCode
modifiers:(NSUInteger)flags
client:(id)sender;
但运气不佳;应用修饰符时,不会调用这些方法。更具体地说,上面的方法不会捕获 command
和 alt
键。像 shift
和 ctrl
这样的简单修饰符可以工作(并且修饰符 flags
变量在第二种方法中设置)。启动 Apple 的示例应用程序 NumberInput亲自看看。
有什么建议吗?我是不是走错了路?
最佳答案
简短回答:
<小时/>Use
handleEvent:client:
and listen to theNSFlagsChanged
event.
IMKInputController
实现 IMKServerInput Protocol ,它提供了三种处理事件的方法。
- 按键绑定(bind) - 使用
inputText:client:
和didCommandBySelector:client:
- 仅限文本数据 - 使用
inputText:key:modifiers:client:
- 处理所有事件 - 使用
handleEvent:client:
看来您只尝试了前两个。您可以使用第三个选项来实现目标。
尝试以下操作:
覆盖
recognizedEvents:
(来自IMKStateSetting Protocol)- (NSUInteger)recognizedEvents:(id)sender { return NSKeyDownMask | NSFlagsChangedMask; }
并使用
handleEvent:client:
-(BOOL)handleEvent:(NSEvent*)event client:(id)sender { NSLog(@"handling event: %@", event); return false; }
您可以在控制台中看到修饰符的每个 keydown 和 keyup 的打印输出,包括 command
和 alt
。
关于objective-c - 使用 IMKit(或类似的)拦截 Command+key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21412985/