如何为 OSX 菜单额外启用复制和粘贴
Posted
技术标签:
【中文标题】如何为 OSX 菜单额外启用复制和粘贴【英文标题】:How to enable copy and paste for OSX menu extra 【发布时间】:2015-10-24 01:15:58 【问题描述】:我正在用 Swift 编写一个额外的菜单,它会打开一个窗口供用户输入一些数据。为该窗口复制粘贴键盘快捷键会很方便。
我在我的额外菜单中添加了一个编辑子菜单,以便我定义键盘快捷键。我已经将它们链接到我的控制器中的方法,但是当键入诸如 command-v 之类的快捷命令时,它不会调用关联的方法。
我应该如何启用额外菜单的快捷方式?
【问题讨论】:
您用来执行此操作的代码在哪里?你不能指望我们猜出问题所在。 您的第一响应者必须实施 validatemenuitem。阅读菜单验证指南 【参考方案1】:我不知道这是否是正确的方法,但我设法根据这篇文章中的方法让它工作: Cocoa Keyboard Shortcuts in Dialog without an Edit Menu
我创建了一个类似的 MyApplication 类,并将第一响应者的复制、粘贴等操作链接到我的菜单。
我在为最新的 swift 获取正确的语法时遇到了一些麻烦。这是我使用的代码:
import Cocoa
class MyApplication: NSApplication
override func sendEvent(event: NSEvent)
if event.type == NSEventType.KeyDown
if ((event.modifierFlags.rawValue) & (NSEventModifierFlags.CommandKeyMask.rawValue) > 0)
switch event.charactersIgnoringModifiers!.lowercaseString
case "x":
if NSApp.sendAction(Selector("cut:"), to:nil, from:self) return
case "c":
if NSApp.sendAction(Selector("copy:"), to:nil, from:self) return
case "v":
if NSApp.sendAction(Selector("paste:"), to:nil, from:self) return
case "z":
if NSApp.sendAction(Selector("undo:"), to:nil, from:self) return
case "a":
if NSApp.sendAction(Selector("selectAll:"), to:nil, from:self) return
default:
break
return super.sendEvent(event)
【讨论】:
以上是关于如何为 OSX 菜单额外启用复制和粘贴的主要内容,如果未能解决你的问题,请参考以下文章