Ios 无法使用UIViewRepresentable&UIDocumentPicker选择文件夹

Ios 无法使用UIViewRepresentable&UIDocumentPicker选择文件夹,ios,swiftui,uikit,Ios,Swiftui,Uikit,我正在尝试创建一个选择器,供用户在SwiftUI应用程序中选择文件夹。但是,似乎还没有任何SwiftUI文档选择器,因此我尝试使用UIViewRepresentable来显示文档选择器,使用此处概述的文件夹文档选择器:。但是,如下图所示,我实际上无法以任何方式选择文件夹-我是否缺少使用SwiftUI拾取程序的特定选项 FolderPicker代码: 结构FolderPicker:UIViewControllerRepresentable{ @绑定var folderURL:String? fun

我正在尝试创建一个选择器,供用户在SwiftUI应用程序中选择文件夹。但是,似乎还没有任何SwiftUI文档选择器,因此我尝试使用UIViewRepresentable来显示文档选择器,使用此处概述的文件夹文档选择器:。但是,如下图所示,我实际上无法以任何方式选择文件夹-我是否缺少使用SwiftUI拾取程序的特定选项

FolderPicker代码:

结构FolderPicker:UIViewControllerRepresentable{ @绑定var folderURL:String? func makeCoordinator->Coordinator{ 返回FolderPicker。协调人属性:self } func makeUIViewControllercontext:UIViewControllerRepresentableContext->UIDocumentPickerViewController{ 让picker=UIDocumentPickerViewController文档类型:[kUTTypeFolder],位于:。导入 picker.delegate=context.coordinator 回程选择器 } func updateUIViewController_uViewController:UIDocumentPickerViewController,上下文:UIViewControllerRepresentableContext{} 类协调器:NSObject,UIDocumentPickerDelegate{ 变量父项:FolderPicker initparent:FolderPicker{ self.parent=parent } 内部函数文档选择器\控制器:UIDocumentPickerViewController,didPickDocumentAt url:url{ 打印URL parent.folderURL=url.absoluteString } } } 它位于TestView中:

结构测试视图:视图{ @状态变量displayPicker=false var body:一些观点{ 按钮操作:{displayPicker.toggle},标签:toggle .sheetisPresented:$showPicker{ FolderPickerfolderURL:$url } } }
kUTTypeFolder不是字符串

正确的方法是


let picker = UIDocumentPickerViewController(documentTypes: [kUTTypeFolder as String], in: .import)

常量kUTTypeFolder来自import CoreServices

此外,在模式:UIDocumentPickerMode和可选的func documentPicker\uController:UIDocumentPickerServiceController中,公共initdocumentTypes allowedUTIs:[String]已被弃用

因此,请使用公共便利初始化来打开contentTypes contentTypes:[UTType]和可选的func documentPicker\uController:UIDocumentPickerViewController,didPickDocumentsAt URL:[URL]

最终代码为:

struct FolderPicker: UIViewControllerRepresentable {
    
    @Binding var folderURL: String?
    
    func makeCoordinator() -> Coordinator {
        return FolderPicker.Coordinator(parent: self)
    }
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<FolderPicker>) -> UIDocumentPickerViewController {
        let picker = UIDocumentPickerViewController(forOpeningContentTypes: [.folder])
        picker.delegate = context.coordinator
        return picker
    }
    
    func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: UIViewControllerRepresentableContext<FolderPicker>) {}
    
    class Coordinator: NSObject, UIDocumentPickerDelegate {
        var parent: FolderPicker
        
        init(parent: FolderPicker) {
            self.parent = parent
        }
        func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
            guard let url = urls.first else {
                return
            }
            print(url)
            parent.folderURL = url.absoluteString
        }
    }
}
这是你的答案吗?