我正在使用 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)
}
}
}
}
我错过了一个更整洁的解决方案吗?
谢谢,
担