【发布时间】:2022-07-11 20:39:13
【问题描述】:
我要求用户使用 DocumentPicker 在 iPhone 的“文件夹”应用程序中选择图像或文件。如何将此选定的文件或图像传输到我自己的应用程序?
表格:
.sheet(isPresented: $isOpenDocumentPicker, onDismiss: {
self.isOpenDocumentPicker = false
}, content: {
DocumentPicker(fileContent: $fileContent)
})
文档选择器:
struct DocumentPicker: UIViewControllerRepresentable {
@Binding var fileContent: String
func makeCoordinator() -> DocumentPickerCoordinator {
return DocumentPickerCoordinator(fileContent: $fileContent)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<DocumentPicker>) -> UIDocumentPickerViewController {
let controller: UIDocumentPickerViewController
controller = UIDocumentPickerViewController(forOpeningContentTypes: [.text, .pdf, .folder, .jpeg, .png, .gif, .exe, .data], asCopy: true)
return controller
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: UIViewControllerRepresentableContext<DocumentPicker>) {
}
}
class DocumentPickerCoordinator: NSObject, UIDocumentPickerDelegate, UINavigationControllerDelegate {
@Binding var fileContent: String
init(fileContent: Binding<String>) {
_fileContent = fileContent
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
let fileURL = urls[0]
do {
fileContent = try String(contentsOf: fileURL, encoding: .utf8)
} catch let error {
print("error: \(error)")
}
}
}
【问题讨论】:
-
你为什么说“到我自己的应用程序”?内包? - 不。在沙箱内 - 只需使用接收到 URL 的 FileManager 进行复制。
标签: swiftui uidocumentpickerviewcontroller