0

我正在使用 Storyboards 编写具有多个视图控制器的 macOS 应用程序。

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

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

我已经做了很多谷歌搜索,并没有很好地记录覆盖这种行为。我可以通过在 App Delegate 中添加一个 IBAction 来全局实现它,我可以使用它来调用关键视图控制器中的一个函数,但这并不是一个非常优雅的解决方案。

目前我在 App Delegate 中的 IBAction 如下所示:

@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)
            }
        }
    }
}

我错过了一个更整洁的解决方案吗?

谢谢,

4

0 回答 0