2

我有一个基于多窗口场景(不是 SwiftUI)的 iPad 应用程序,我正在使用 mac 催化剂适应 Mac。我在主菜单行为方面遇到问题。菜单使用 func buildMenu() 在 AppDelegate.swift 中构建。例如,我有一个 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 以模态方式呈现主视图控制器。主视图控制器是第一响应者,一切都很好,但是一旦你在它上面打开另一个模式窗口,就像系统生成的关于对话框一样,原始文档浏览器视图控制器成为第一响应者和主视图控制器不再在窗口层次结构中(即使文档浏览器视图控制器不可见,并且主视图控制器仍然显示并正常工作)。如果有人有处理这个问题的经验,我会很感激他们的建议。

4

1 回答 1

0

通过进一步的实验,鉴于这是一个基于 UIDocument 的应用程序,看起来文档浏览器视图控制器成为对话框关闭后的第一响应者。所以我想我可以解决这个问题并将操作从文档浏览器转发到主视图控制器。

于 2021-04-21T19:29:54.250 回答