Я пишу приложение macOS с несколькими контроллерами представления, используя раскадровки.
В моем главном контроллере представления я хотел бы иметь возможность копировать и вставлять данные в NSPasteboard. Данные относятся к кнопкам, отображаемым для пользователя, и точные данные, подлежащие копированию, варьируются в зависимости от того, какая кнопка была нажата / выбрана последней.
Я хотел бы иметь возможность переопределить стандартное поведение Скопируйте и вставьте NSMenuItems, когда мой главный View Controller является самым передним (ключевым) окном, но вернитесь к стандартному поведению, когда другие windows находятся на переднем плане, так как все они содержат NSTextFields, которые можно скопировать / вставить в.
Я много гуглил, и переопределение этого поведения не очень хорошо задокументировано. Я могу добиться этого глобально, добавив IBAction в делегат приложения, который я мог бы использовать для вызова функции в зависимости от того, какой View Controller является ключевым, но это не похоже на очень элегантное решение.
В настоящее время мой 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)
}
}
}
}
Мне не хватает более аккуратного решения?
Спасибо,
Дан