我有一个大窗口,上面有许多 NSTextField
字段,即使任何文本字段具有焦点,我也想拦截空格键,以便随时按空格键将导致单独的操作。
子类化 NSTextField
并覆盖 -keyUp:
允许我检测空格键,但文本字段中仍插入空白。 -keyDown:
根本不触发。
对于其他键(例如 Return 和箭头键),我可以使用 control:textView:doCommandBySelector:
委托(delegate)方法,但它不会通过空格键触发。
有很多关于 NSTextView
的建议,但我没有找到关于 NSTextField
的建议。
最佳答案
您是否尝试过添加事件监视器?您可以通过 NSEvent
类方法 addLocalMonitorForEventsMatchingMask(_:handler:) 创建它们
他们会优先处理您指定的事件。在您的情况下,您需要为 keyDown
事件添加一个监视器,然后在关联的 block 中决定如何处理它们。在 block 的末尾,您可以在事件到达时返回该事件,在这种情况下,它将正常运行,您可以吞掉该事件(返回 nil ),或者您可以通过创建一个新的事件对象并返回它。这是一个例子:
// You can add monitors anywhere - I've chosen the AppDelegate for
// this simple example.
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask
handler:^NSEvent * (NSEvent * theEvent) {
if (theEvent.keyCode == 49) {
NSLog(@"swallowing spacebar");
theEvent = nil;
}
return theEvent;
}];
}
关于objective-c - 在包含多个 NSTextField 的窗口中捕获空格键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626655/