【发布时间】:2021-06-06 00:04:44
【问题描述】:
我正在 macOS 上通过 XCode 开发我的应用程序
我没有故事板,我删除了菜单。
我只使用AppDelegate。
NSTextField 没有菜单不允许使用快捷键 [CMD+C] [CMD+V]。
我想在不启用菜单的情况下启用它,但我不知道如何。
编辑:
我正在尝试使用这个:
final class EditableNSTextField: NSTextField {
private let commandKey = NSEventModifierFlags.command.rawValue
private let commandShiftKey = NSEventModifierFlags.command.rawValue | NSEventModifierFlags.shift.rawValue
override func performKeyEquivalent(with event: NSEvent) -> Bool {
if event.type == NSEventType.keyDown {
if (event.modifierFlags.rawValue & NSEventModifierFlags.deviceIndependentFlagsMask.rawValue) == commandKey {
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
}
}
else if (event.modifierFlags.rawValue & NSEventModifierFlags.deviceIndependentFlagsMask.rawValue) == commandShiftKey {
if event.charactersIgnoringModifiers == "Z" {
if NSApp.sendAction(Selector(("redo:")), to:nil, from:self) { return true }
}
}
}
return super.performKeyEquivalent(with: event)
}
}
【问题讨论】:
-
那会非常混乱;键盘快捷键是菜单的一部分,没有任何菜单的快捷键没有多大意义。
-
@Caleb “那会非常混乱;键盘快捷键是菜单的一部分,没有任何菜单的快捷键没有多大意义”。 ???我不是菜单爱好者。我正在制作一个没有菜单的应用程序。有 CMD+C CMD+V 选项有意义吗?请回复回答。从争论中走出来,就像打败salumi一样有帮助。
-
@Willeke - “keyDown(with: event) 是一种方法。你必须在 performKeyEquivalent 中检查 event.type 吗?”我不是这种语言的狗,但这就是我正在寻找的东西。我没有密钥,也不知道如何实现它。我已经声明了
@IBOutlet var txFileURL: EditableNSTextField!,但不要woooooooorksss。 CMD+C CMD+V怎么做? -
@Willeke - 我忘记在 xib 文件中设置文本字段的类...我真的不知道 stackoverflow.com/a/44364889/2321140 现在我的键盘快捷键可以工作了,不仅仅是我的老鼠 ????。我以前没有键盘。在我的脑海里只有氧气??????????。 Tnkz 4 ya cmets ????????
标签: xcode macos keyboard-shortcuts