如何为 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 菜单额外启用复制和粘贴的主要内容,如果未能解决你的问题,请参考以下文章

如何为dataTables启用多列过滤器?

如何为特定目录或文件启用特定 gcc 警告? [复制]

WPF 在列表框中启用突出显示、复制和粘贴

在 UILabel 上显示 iPhone 剪切复制粘贴菜单

如何禁用 UITextView 中的复制、粘贴选项并再次启用 iPhone 应用程序?

macOS 上的 SwiftUI:如何为 onDelete 启用 UI(从列表中删除)