Модальные диалоги, нарушающие цепочку респондентов в приложении на основе сцены 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, похоже, что контроллер представления браузера документов становится первым ответчиком после закрытия диалогового окна. Поэтому я думаю, что могу обойти это и перенаправить действия из браузера документов в главный контроллер представления.

Другие вопросы по тегам