Reputation: 251
I'm trying to open cloud storages app in my document picker view controller. I have applied all the necessary delegates method of document picker view controller. When I hit a button it shows me document picker view but the application icons and their name are not shown in it. It only shows browse option in the picker view. I want to show all the storages in front. My code is this,
@IBAction func cloudBtnTapped(_ sender: Any) {
let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF),String(kUTTypeZipArchive), String (kUTTypePNG), String (kUTTypeJPEG), String (kUTTypeText),String (kUTTypePlainText)], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .fullScreen
self.present(importMenu, animated: true, completion: nil)
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
cico = url as URL as NSURL
print("The Url is : /(cico)", cico)
// Start background thread so that image loading does not make app unresponsive
DispatchQueue.global(qos: .userInitiated).async {
let imageData:NSData = NSData(contentsOf: self.cico as URL)!
// When from background thread, UI needs to be updated on main_queue
DispatchQueue.main.async {
let image = UIImage(data: imageData as Data)
self.image1.image = image
}
}
do {
let weatherData = try NSData(contentsOf: cico as URL, options: NSData.ReadingOptions())
let activityItems = [weatherData]
let activityController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
if UI_USER_INTERFACE_IDIOM() == .phone {
self.present (activityController, animated: true, completion: {
print("Hello")
})
}
else {
let popup = UIPopoverController(contentViewController: activityController)
popup.present(from: CGRect(x: CGFloat(self.view.frame.size.width / 2), y: CGFloat(self.view.frame.size.height / 4), width: CGFloat(0), height: CGFloat(0)), in: self.view, permittedArrowDirections: .any, animated: true)
}
} catch {
print(error)
}
//optional, case PDF -> render
//displayPDFweb.loadRequest(NSURLRequest(url: cico) as URLRequest)
}
func documentMenu(_ documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) {
documentPicker.delegate = self
present(documentPicker, animated: true, completion: nil)
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print(" cancelled by user")
// dismiss(animated: true, completion: nil)
_ = navigationController?.popViewController(animated: true)
}
When hit button it shows document picker view like this,
But I want this . picker view like this,
How can I show this?
Upvotes: 1
Views: 2617
Reputation: 8914
UIDocumentMenuViewController
will automatically shown options like dropbox, google drive is you have installed it on your device, other wise it won't be displayed.
You can also add some custom options to the menu by the following method...
addOptionWithTitle:image:order:handler:
method.
You can use UIDocumentPickerViewController
to get the files from the Files apps or iCloud Drive.
let options = [kUTTypePDF as String, kUTTypeZipArchive as String, kUTTypePNG as String, kUTTypeJPEG as String, kUTTypeText as String, kUTTypePlainText as String]
let documentPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(documentTypes: options, in: .import)
documentPicker.delegate = self
documentPicker.modalPresentationStyle = .fullScreen
self.present(documentPicker, animated: true, completion: nil)
extension YourViewController: UIDocumentPickerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
//from url you can get selected item
}
}
Upvotes: 3