如何覆盖单视图控制器Swift macOS的NSMenuItems复制和粘贴

如何覆盖单视图控制器Swift macOS的NSMenuItems复制和粘贴,swift,macos,copy-paste,nsmenuitem,pasteboard,Swift,Macos,Copy Paste,Nsmenuitem,Pasteboard,我正在使用故事板编写一个带有多个视图控制器的macOS应用程序 在我的主视图控制器中,我希望能够将数据复制并粘贴到NSPasteboard。数据与显示给用户的按钮相关,要复制的确切数据因最近按下/选择的按钮而异 当我的主视图控制器是最前面的(关键)窗口时,我希望能够覆盖复制和粘贴NSMenuItems的标准行为,但当其他窗口位于前台时,我希望能够恢复到标准行为,因为它们都包含可以复制/粘贴到的NSTextFields 我在谷歌上做了很多工作,但没有很好的文档记录覆盖这种行为。我可以通过在App委

我正在使用故事板编写一个带有多个视图控制器的macOS应用程序

在我的主视图控制器中,我希望能够将数据复制并粘贴到NSPasteboard。数据与显示给用户的按钮相关,要复制的确切数据因最近按下/选择的按钮而异

当我的主视图控制器是最前面的(关键)窗口时,我希望能够覆盖复制和粘贴NSMenuItems的标准行为,但当其他窗口位于前台时,我希望能够恢复到标准行为,因为它们都包含可以复制/粘贴到的NSTextFields

我在谷歌上做了很多工作,但没有很好的文档记录覆盖这种行为。我可以通过在App委托中添加一个iAction来全局实现它,我可以使用它在任何视图控制器中调用一个函数,但这并不是一个非常优雅的解决方案

当前,我在应用程序委托中的iAction如下所示:

@IBAction func copy(_ sender: Any) {

    if let window = NSApplication.shared.keyWindow {
        if let splitView = window.contentViewController as? SplitViewController {
            if let controlVC = splitView.controlItem.viewController as? ControlViewController {
                controlVC.copyAction(self)
            }
        }
    }
}
我是否错过了一个更整洁的解决方案

谢谢


Dan

在视图控制器中实现复制和粘贴?是的,因此我有一个包含16个按钮的视图控制器。当用户按下按钮时,该按钮将高亮显示/选中。然后,用户可以决定将一些数据复制到粘贴板。当前,视图中有一个名为“复制”的单独按钮,该按钮附加到运行此代码的操作上,但我希望用户能够从“编辑”菜单中选择“复制”,或按Command-C复制数据,这就是我取消粘贴的地方。这是否回答了您的问题?不幸的是,如果我添加这些iBaction,我可以运行我的自定义代码,但我失去了应用程序其余部分、所有NSTextFields等中的所有内置复制/粘贴功能。您是否更改了菜单项?