Replaces UIDocumentBrowserViewController with UIDocumentPickerViewController on iOS 17+
Prior to iOS 17, UIDocumentPickerViewController was too buggy to reliably use with iCloud Drive.
This commit is contained in:
parent
4cf705f141
commit
8bd6fe1e11
@ -8,6 +8,7 @@
|
||||
|
||||
import UIKit
|
||||
import MobileCoreServices
|
||||
import UniformTypeIdentifiers
|
||||
import ObjectiveC
|
||||
|
||||
import DeltaCore
|
||||
@ -147,18 +148,38 @@ class ImportController: NSObject
|
||||
|
||||
private func presentDocumentBrowser()
|
||||
{
|
||||
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(ImportController.cancel))
|
||||
let supportedTypes = self.documentTypes.compactMap { UTType($0) }
|
||||
|
||||
let documentBrowserViewController = UIDocumentBrowserViewController(forOpeningFilesWithContentTypes: Array(self.documentTypes))
|
||||
let presentedViewController: UIViewController
|
||||
|
||||
if #available(iOS 17, *)
|
||||
{
|
||||
// Prior to iOS 17, UIDocumentPickerViewController was too buggy to reliably use with iCloud Drive.
|
||||
|
||||
let documentPickerViewController = UIDocumentPickerViewController(forOpeningContentTypes: supportedTypes, asCopy: true)
|
||||
documentPickerViewController.delegate = self
|
||||
documentPickerViewController.overrideUserInterfaceStyle = .dark
|
||||
documentPickerViewController.allowsMultipleSelection = true
|
||||
|
||||
presentedViewController = documentPickerViewController
|
||||
}
|
||||
else
|
||||
{
|
||||
let documentBrowserViewController = UIDocumentBrowserViewController(forOpening: supportedTypes)
|
||||
documentBrowserViewController.delegate = self
|
||||
documentBrowserViewController.modalPresentationStyle = .fullScreen
|
||||
documentBrowserViewController.browserUserInterfaceStyle = .dark
|
||||
documentBrowserViewController.allowsPickingMultipleItems = true
|
||||
documentBrowserViewController.allowsDocumentCreation = false
|
||||
|
||||
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(ImportController.cancel))
|
||||
documentBrowserViewController.additionalTrailingNavigationBarButtonItems = [cancelButton]
|
||||
|
||||
self.presentedViewController = documentBrowserViewController
|
||||
self.presentingViewController?.present(documentBrowserViewController, animated: true, completion: nil)
|
||||
presentedViewController = documentBrowserViewController
|
||||
}
|
||||
|
||||
self.presentedViewController = presentedViewController
|
||||
self.presentingViewController?.present(presentedViewController, animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
|
||||
@ -195,9 +216,22 @@ extension ImportController
|
||||
}
|
||||
}
|
||||
|
||||
extension ImportController: UIDocumentPickerDelegate
|
||||
{
|
||||
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt documentURLs: [URL])
|
||||
{
|
||||
self.finish(with: Set(documentURLs), errors: [])
|
||||
}
|
||||
|
||||
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController)
|
||||
{
|
||||
self.cancel()
|
||||
}
|
||||
}
|
||||
|
||||
extension ImportController: UIDocumentBrowserViewControllerDelegate
|
||||
{
|
||||
func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL])
|
||||
func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentsAt documentURLs: [URL])
|
||||
{
|
||||
var coordinatedURLs = Set<URL>()
|
||||
var errors = [Error]()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user