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 UIKit
|
||||||
import MobileCoreServices
|
import MobileCoreServices
|
||||||
|
import UniformTypeIdentifiers
|
||||||
import ObjectiveC
|
import ObjectiveC
|
||||||
|
|
||||||
import DeltaCore
|
import DeltaCore
|
||||||
@ -147,18 +148,38 @@ class ImportController: NSObject
|
|||||||
|
|
||||||
private func presentDocumentBrowser()
|
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
|
||||||
documentBrowserViewController.delegate = self
|
|
||||||
documentBrowserViewController.modalPresentationStyle = .fullScreen
|
|
||||||
documentBrowserViewController.browserUserInterfaceStyle = .dark
|
|
||||||
documentBrowserViewController.allowsPickingMultipleItems = true
|
|
||||||
documentBrowserViewController.allowsDocumentCreation = false
|
|
||||||
documentBrowserViewController.additionalTrailingNavigationBarButtonItems = [cancelButton]
|
|
||||||
|
|
||||||
self.presentedViewController = documentBrowserViewController
|
if #available(iOS 17, *)
|
||||||
self.presentingViewController?.present(documentBrowserViewController, animated: true, completion: nil)
|
{
|
||||||
|
// 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]
|
||||||
|
|
||||||
|
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
|
extension ImportController: UIDocumentBrowserViewControllerDelegate
|
||||||
{
|
{
|
||||||
func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL])
|
func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentsAt documentURLs: [URL])
|
||||||
{
|
{
|
||||||
var coordinatedURLs = Set<URL>()
|
var coordinatedURLs = Set<URL>()
|
||||||
var errors = [Error]()
|
var errors = [Error]()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user