Модальные диалоги, нарушающие цепочку респондентов в приложении на основе сцены Mac Catalyst
У меня есть приложение для iPad на основе многооконных сцен (не SwiftUI), которое я адаптирую для Mac с использованием катализатора Mac. У меня проблемы с поведением в главном меню. Меню создается в AppDelegate.swift с помощью функции buildMenu(). У меня есть, например, пункт меню Open Image ..., который использует селектор в моем основном контроллере представления. Вот код в buildMenu():
let openFileCommand = UIKeyCommand(
title: "Open Image...",
action: #selector(DiagramViewController.openImageFile(_:)),
input: "o",
modifierFlags: [.command]
)
let openFileMenu = UIMenu(
title: "",
image: nil,
identifier: UIMenu.Identifier("openImage"),
options: .displayInline,
children: [openFileCommand]
)
builder.insertSibling(openFileMenu, afterMenu: .newScene)
Он включен и отлично работает при первом открытии контроллера представления. Видеть:
Затем я открываю любое модальное диалоговое окно, например, диалоговое окно «О программе», и после его закрытия пункт меню «Открыть изображение ...» деактивируется, как будто селектор больше не находится в цепочке респондентов, хотя все работает на контроллере представления.
Я не понимаю, что здесь происходит. Такая функциональность отлично работает в приложениях-катализаторах, не поддерживающих многооконный режим.
ОБНОВЛЕНИЕ: проблема не в том, что приложение основано на сценах. Это приложение на основе UIDocument, и UIDocumentBrowserViewController модально представляет главный контроллер представления. Контроллер основного представления тогда является первым респондентом, и все в порядке, но как только вы откроете другое модальное окно поверх него, как диалоговое окно «О программе», созданное системой, исходный контроллер представления браузера документа становится первым респондентом и контроллером основного представления. больше не входит в иерархию окон (даже если контроллер представления обозревателя документов невидим, а контроллер основного представления все еще отображается и работает нормально). Если у кого-то есть опыт решения этой проблемы, буду признателен за их совет.
1 ответ
При дальнейших экспериментах и с учетом того, что это приложение на основе UIDocument, похоже, что контроллер представления браузера документов становится первым ответчиком после закрытия диалогового окна. Поэтому я думаю, что могу обойти это и перенаправить действия из браузера документов в главный контроллер представления.