NSTextField 中的捕获选项/命令键
Capture option / command key inside NSTextField
我在 NSViewController
中使用了 NSTextField
。我想捕捉像 ⌥+0 这样的特殊键盘快捷键来做一些特别的事情。然而,这些关键事件不会传递给:
- (BOOL) control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector
我知道我们无法覆盖自定义 NSTextField 的 keyDown
事件,因为无论如何都使用特殊字段编辑器代替我们的字段。如何处理这些特殊的快捷方式而不求助于在主菜单中添加隐藏的 NSMenuItem
s?
看似简单的事情,显然不在 Mac 上。使用自定义 NSFormatter
是行不通的,因为我想捕获每个击键(包括修改键)。手头的两个选项是在 NSWindow
级别拦截 sendEvent
并将其冒泡到托管焦点控件的视图控制器,或者使用自定义字段编辑器。我最终为 NSTextField
返回了一个自定义字段编辑器(通过子类化 NSTextField
/ NSTextFieldCell
并为字段编辑器返回一个子类化的 NSTextView
对象)。这样,我就能够干净地使用委托拦截击键并将它们传递给视图控制器进行处理。不会被消耗的击键将由字段编辑器正常处理。
我在 NSViewController
中使用了 NSTextField
。我想捕捉像 ⌥+0 这样的特殊键盘快捷键来做一些特别的事情。然而,这些关键事件不会传递给:
- (BOOL) control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector
我知道我们无法覆盖自定义 NSTextField 的 keyDown
事件,因为无论如何都使用特殊字段编辑器代替我们的字段。如何处理这些特殊的快捷方式而不求助于在主菜单中添加隐藏的 NSMenuItem
s?
看似简单的事情,显然不在 Mac 上。使用自定义 NSFormatter
是行不通的,因为我想捕获每个击键(包括修改键)。手头的两个选项是在 NSWindow
级别拦截 sendEvent
并将其冒泡到托管焦点控件的视图控制器,或者使用自定义字段编辑器。我最终为 NSTextField
返回了一个自定义字段编辑器(通过子类化 NSTextField
/ NSTextFieldCell
并为字段编辑器返回一个子类化的 NSTextView
对象)。这样,我就能够干净地使用委托拦截击键并将它们传递给视图控制器进行处理。不会被消耗的击键将由字段编辑器正常处理。