Swiftui Swift UI 2 DocumentGroup获取导航栏按钮操作
Swiftui Swift UI 2 DocumentGroup获取导航栏按钮操作,swiftui,ios14,documentgroup,Swiftui,Ios14,Documentgroup,我正在使用新的“DocumentGroup”场景进行一个iOS 14(目前正在进行Beta)项目,我真的不知道如何在导航栏中检测事件,比如按下“”,我最后在我的文档的ContentView.body中执行了以下操作: NavigationView{ 侧栏(文档:$document) .navigationBarItems(前导:按钮(“后退”){ //找出如何以编程方式返回。。。 }) 文本(“未选择任何内容”) } .navigationBarHidden(真) 我基本上取消了文档浏览器附带
我正在使用新的“DocumentGroup”场景进行一个iOS 14(目前正在进行Beta)项目,我真的不知道如何在导航栏中检测事件,比如按下“”,我最后在我的文档的
ContentView.body
中执行了以下操作:
NavigationView{
侧栏(文档:$document)
.navigationBarItems(前导:按钮(“后退”){
//找出如何以编程方式返回。。。
})
文本(“未选择任何内容”)
}
.navigationBarHidden(真)
我基本上取消了文档浏览器附带的自动NavigationView
。这并不理想有很多原因,第一个原因是我还没有真正弄清楚如何回去。如果我们能够访问底层的NavigationView
,这样我就可以设置我的边栏和内容,这不会是一个问题,但到目前为止,我在这里也没有成功
DocumentGroup
看起来有点像半生不熟的垃圾。为什么它是推送,而不是呈现在一个“空”文档上?为什么我不能设置文档组
等的强调颜色。我已经为这些项目写了反馈,但谁知道在发布之前是否会得到解决
最后一个选择是自己接管,而不是使用DocumentGroup
,使用UIDocumentBrowserViewController
作为UIViewControllerRepresentable
,继续你的生活。我可能很快就会到这里来
更新:
我抛弃了DocumentGroup
。这根本没有任何意义。推送内容?哑的改变色彩?不能我的应用程序还取消了SwiftUI应用程序条目,因此我可以完全控制UIDocumentBrowserViewController,我建议您也这样做。唯一困难的部分是如何最好地利用基于UIDocument
的存储,而不是更好的FileDocument
SwiftUI提供的存储。为此,我基本上做到了:
最终类文档:UIDocument,ObservableObject{
var someDocumentProperty:String=“”{
意志{
//这将更新SwiftUI视图层次结构
objectWillChange.send()
}迪塞特{
//每当您更改此属性时,它将自动保存
updateChangeCount(.done)
}
}
}
现在,它将完全与SwiftUI视图一起工作,正确保存所有内容。完全相同的问题。简而言之,我决定看看是否仍在创建UIApplication.shared,并且在创建UIApplication.shared时,我能够以编程方式返回,如下所示:
private func goBack() {
#if canImport(UIKit)
guard let currentWindow = UIApplication.shared.windows.first,
let documentBrowser = currentWindow
.rootViewController as? UIDocumentBrowserViewController
else
{
logw(
"<\(#fileID) \(#function)> Failed to retrieve document browser."
)
return
}
documentBrowser.dismiss(animated: true) {
logi("<\(#fileID) \(#function)> the document browser has dismissed it's child.")
}
#endif
非常感谢。我一直在寻找一个简单的答案,因为我想保留DocumentGroup功能,但放弃内置的导航栏。
struct ContentView: View {
@Binding var document: DocumentAppDocuments
var body: some View {
TextEditor(text: $document.text)
}
private func goBack() {
#if canImport(UIKit)
guard let currentWindow = UIApplication.shared.windows.first,
let documentBrowser = currentWindow
.rootViewController as? UIDocumentBrowserViewController
else
{
logw(
"<\(#fileID) \(#function)> Failed to retrieve document browser."
)
return
}
documentBrowser.dismiss(animated: true) {
logi("<\(#fileID) \(#function)> the document browser has dismissed it's child.")
}
#endif
`UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true) { print("the document browser has dismissed it's child.") }`