[英]UIDocumentpicker Content are greyed out
我在 swiftUI 中使用 UIViewControllerRepresentable 进行文档选择器演示。 问题是我无法选择所有以冻结方式显示的视频音频 pdf。 我需要为 iOS 14 及更高版本修复此问题。 我可以通过按住来选择文件,然后释放它只适用于真实设备中的模拟器,除了文件结构外,模拟器和设备都不可能,其余文件都是灰色的。
struct DocumentPicker: UIViewControllerRepresentable {
@ObservedObject var chatViewModel: RedesignChatViewModel
func makeUIViewController(context: UIViewControllerRepresentableContext<DocumentPicker>) -> UIDocumentPickerViewController {
let viewController = UIDocumentPickerViewController(forOpeningContentTypes: [.pdf, .mp3, .audio, .video, .movie, .item])
viewController.shouldShowFileExtensions = true
viewController.allowsMultipleSelection = false
viewController.delegate = context.coordinator
return viewController
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {
}
}
extension DocumentPicker {
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UIDocumentPickerDelegate {
var parent: DocumentPicker
var path: String?
init(_ documentPicker: DocumentPicker) {
self.parent = documentPicker
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let url = urls.first else { return }
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
controller.dismiss(animated: true)
}
有一些错误,首先您需要创建一个UIViewController
并使用它来呈现UIDocumentPickerViewController
。 您还需要将Coordinator(self)
更改为Coordinator()
并在makeUIViewController
中返回context.coordinator.myViewController
这应该是一个惰性属性。 这样做的原因是您传入的self
立即过时,因为它是一种值类型。 您还需要删除@ObservedObject
并为您的属性添加let
或@Binding var
。 当 representable 初始化为这些属性的新值时, updateUIViewController
将被调用,然后您可以使用新值更新协调器和视图控制器。
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.