在 macOS 中,在 APP 中使用 ⌘C,⌘V,⌘Z,⌘X 这些基础的快捷键,这是因为菜单栏的“编辑”菜单中实现了相应的功能,但有的时候 APP 没有菜单栏,比如 menu bar 类型的APP,并没有常见的菜单栏,在开发的时候就删除了,而且一不小心还发现不了 NSTextField 的快捷功能消失了。
这种情况下 NSTextField 输入框的快捷键功能就会消失,通过添加以下的 extension 实现快捷键功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
extension NSTextField {
open override var focusRingType: NSFocusRingType {
get { .none }
set { }
}
// NSTextField 快捷键支持
open override func performKeyEquivalent(with event: NSEvent) -> Bool {
if event.type == NSEvent.EventType.keyDown {
if (event.modifierFlags.rawValue & NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue) == NSEvent.ModifierFlags.command.rawValue {
switch event.charactersIgnoringModifiers! {
case "x":
if NSApp.sendAction(#selector(NSText.cut(_:)), to: nil, from: self) { return true }
case "c":
if NSApp.sendAction(#selector(NSText.copy(_:)), to: nil, from: self) { return true }
case "v":
if NSApp.sendAction(#selector(NSText.paste(_:)), to: nil, from: self) { return true }
case "z":
if NSApp.sendAction(Selector(("undo:")), to: nil, from: self) { return true }
case "a":
if NSApp.sendAction(#selector(NSResponder.selectAll(_:)), to: nil, from: self) { return true }
default:
break
}
}
}
return super.performKeyEquivalent(with: event)
}
}