Swift UI 2 DocumentGroup获取导航栏按钮操作

Nie*_*els 3 swiftui ios14 documentgroup

在此输入图像描述

我正在为iOS 14(目前正在开发Beta 版)项目使用新的“ DocumentGroup ”场景,我真的不知道如何检测导航栏中的事件,例如按“<”或返回(参见屏幕) “DocumentGroup”场景的预定义导航栏。对于自定义按钮,这是可能的,并且更改栏的样式(例如灰色)也没什么大不了的。我尝试禁用该按钮,向导航栏添加新按钮等。以下示例是您要在 Xcode 中创建新的基于文档的应用程序时的标准代码:

@main struct DocumentAppApp: App {
@SceneBuilder var body: some Scene {
    
    // Adding of a new document
    DocumentGroup(newDocument: DocumentAppDocuments()) { file in
        ContentView(document: file.$document) // .navigationBarBackButtonHidden(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

}

struct ContentView: View {
@Binding var document: DocumentAppDocuments

var body: some View {
    TextEditor(text: $document.text)
}
Run Code Online (Sandbox Code Playgroud)

}

Pro*_*in8 5

我最终在我的文档中执行了以下操作ContentView.body

        NavigationView {
            SideBar(document: $document)
                .navigationBarItems(leading: Button("Back") {
                    // figure out how to programmatically go back...
                })
            
            Text("Nothing selected")
        }
        .navigationBarHidden(true)
Run Code Online (Sandbox Code Playgroud)

NavigationView我基本上杀死了文档浏览器附带的自动功能。由于很多原因,这并不理想,首先是我实际上还没有弄清楚如何返回。如果我们能够访问底层,NavigationView这样我就可以设置我的侧边栏和我的内容,这不会是一个问题,但到目前为止我在这里也没有成功。

DocumentGroup虽然有点像半生不熟的垃圾。为什么它是推动而不是呈现“空”文档?为什么我不能设置 等的强调色DocumentGroup。我已经为这些项目写了反馈,但谁知道它是否会在发布前得到解决。

最后一个选择是自己接管它,DocumentGroup根本不使用,用作UIDocumentBrowserViewController一个UIViewControllerRepresentable并继续你的生活。我可能很快就会到这里。

更新:我放弃了DocumentGroup。这根本没有任何意义。推送内容?哑的。改变色调颜色?不能。我的应用程序还摆脱了 SwiftUI 应用程序条目,因此我可以完全控制 UIDocumentBrowserViewController,我建议您也这样做。唯一困难的部分是弄清楚如何最好地利用UIDocument基于存储而不是更好的FileDocumentSwiftUI 提供的存储。为此,我基本上是这样做的:

final class Document: UIDocument, ObservableObject {

   var someDocumentProperty: String = "" {
     willSet {
       // this updates the SwiftUI view hierarchy
       objectWillChange.send()
     } didSet {
       // this will autosave whenever you change this property
       updateChangeCount(.done)
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

现在它将完全与 SwiftUI 视图配合使用,正确保存一切。