DocumentPickerViewController和.sheet

问题描述

我尝试实现文档选择器。我发现了:

UIDocumentPickerViewController doesn't show any contents on Mac Catalyst

那里的解决方案有效。但是,我现在想做的是在演示工作表的同时使用UIDocumentPickerViewController。简单的伪代码

struct ContentView: View,DropDelegate {
                
    var body: some View {
        
        Text("there is a sheet")
            .sheet(isPresented: .constant(true)) {
                Button("choose") {
                    let picker = DocumentPickerViewController(
                        supportedTypes: [],onPick: { urls in
                            print(urls)
                        },ondismiss: {
                            print("dismiss")
                        }
                    )
                    UIApplication.shared.windows[0].rootViewController!.present(picker,animated: true)
                }
            }
    }
    
}

class DocumentPickerViewController: UIDocumentPickerViewController,UIDocumentPickerDelegate {
    private let ondismiss: () -> Void
    private let onPick: ([URL]) -> ()
    
    init(supportedTypes: [String],onPick: @escaping ([URL]) -> Void,ondismiss: @escaping () -> Void) {
        self.ondismiss = ondismiss
        self.onPick = onPick
        
        super.init(documentTypes: supportedTypes,in: .open)
        
        self.allowsMultipleSelection = true
        self.delegate = self
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func documentPicker(_ controller: UIDocumentPickerViewController,didPickDocumentsAt urls: [URL]) {
        self.onPick(urls)
    }
    
    func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
        self.ondismiss()
    }
}

如果我现在按下按钮,则会收到警告:

Warning: Attempt to present <SwiftUICatalyst.DocumentPickerViewController: 0x102910560>  on ... which is already presenting <_TtGC7SwiftUIP13$7fff6c0c8c6c22SheetHostingControllerVS_7AnyView_: 0x101630cf0>

我想到的唯一解决方案是不使用第一个.sheet,但我确实需要在工作表中显示信息和文件选择按钮。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)