type custom bar ios swift uidocumentpickervc

custom - Implementar Selector de documentos en swift(iOS)



uibutton(type:) (5)

Quiero elegir un archivo de cualquier tipo (.pdf, .docs, .xlsx, .jpeg, .txt, .rtf, etc.) en mi aplicación iOS. Al hacer clic en el botón Cargar , quiero que mi aplicación abra un directorio y seleccione archivos ( DocumentsPicker )

@IBAction pickDocument(sender: UIButton) { //Open Document Picker }

¿Algún enfoque para hacerlo en Swift ?


Desde las capacidades de su proyecto, habilite tanto el iCloud como el Key-Sharing .

Importe MobileCoreServices en su clase y finalmente amplíe las siguientes tres clases dentro de su UIViewController:

UIDocumentMenuDelegate,UIDocumentPickerDelegate,UINavigationControllerDelegate

Implementar las siguientes funciones:

public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) { let myURL = url as URL print("import result : /(myURL)") } public func documentMenu(_ documentMenu:UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) { documentPicker.delegate = self present(documentPicker, animated: true, completion: nil) } func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) { print("view was cancelled") dismiss(animated: true, completion: nil) }

¿Cómo llamar a todo esto? Agregue el siguiente bit de código a su función de clic.

func clickFunction(){ let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF)], in: .import) importMenu.delegate = self importMenu.modalPresentationStyle = .formSheet self.present(importMenu, animated: true, completion: nil) }

Haga clic en su botón. Aparecerá el siguiente menú ...

En el caso de Dropbox. Al hacer clic en cualquier elemento. Será redirigido a su aplicación y la URL se registrará en su terminal.

Manipule los tipos de documentos a su necesidad. En mi aplicación, los usuarios solo pueden Pdf. Así que, haz lo que quieras.

kUTTypePDF kUTTypePNG kUTTypeJPEG ...

También si quieres personalizar tu propia barra de menú. Agregue el siguiente código y personalice su propia función dentro del controlador

importMenu.addOption(withTitle: "Create New Document", image: nil, order: .first, handler: { print("New Doc Requested") })

Disfrútala.


El UIDocumentMenuViewController está en desuso desde iOS11. También lo encontré con errores cuando se presentó desde un controlador de vista modal. Aquí hay una forma directa de usar el selector:

import MobileCoreServices private func attachDocument() { let types = [kUTTypePDF, kUTTypeText, kUTTypeRTF, kUTTypeSpreadsheet] let importMenu = UIDocumentPickerViewController(documentTypes: types as [String], in: .import) if #available(iOS 11.0, *) { importMenu.allowsMultipleSelection = true } importMenu.delegate = self importMenu.modalPresentationStyle = .formSheet present(importMenu, animated: true) } extension AViewController: UIDocumentPickerDelegate, UINavigationControllerDelegate { func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { viewModel.attachDocuments(at: urls) } func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) { controller.dismiss(animated: true, completion: nil) } }

Como de costumbre, no olvides añadir el soporte de iCloud:


Esto te ayudará a implementar la funcionalidad de descarga / carga.

UIDocumentMenuViewController *importMenu = [[UIDocumentMenuViewController alloc] initWithDocumentTypes:@[@"public.item"] inMode:UIDocumentPickerModeImport | UIDocumentPickerModeExportToService];

Para más información, lea la documentación de Apple.


Podría implementar lo que describe utilizando NSURLSession .

Tendrá que limitar el directorio de destino que muestra al directorio de documentos de su aplicación. Las aplicaciones no tienen acceso completo al sistema de archivos.


Puede usar UIDocumentPickerViewController para obtener los archivos de las aplicaciones Archivos o iCloud Drive.

  1. Active el Key-value storage y los iCloud Documents de iCloud desde la capacidad de iCloud :

  1. Importe el siguiente marco en el controlador de vista en el que desea abrir el selector de documentos:

    import MobileCoreServices

  2. Implementar el siguiente método de UIDocumentPickerDelegate :

    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { // you get from the urls parameter the urls from the files selected }

  3. Cree un UIDocumentPickerViewController para mostrar el selector de archivos o iCloud Drive:

    let types: [String] = [kUTTypePDF as String] let documentPicker = UIDocumentPickerViewController(documentTypes: types, in: .import) documentPicker.delegate = self documentPicker.modalPresentationStyle = .formSheet self.present(documentPicker, animated: true, completion: nil)

    Si desea que el usuario pueda importar más tipos de archivos a su aplicación, debe agregar más UTType s a los types NSArray . Para ver todos los tipos disponibles, puede consultar los documentos de UTType

Cuando el selector de documentos se abre en iOS 11 e intenta seleccionar un archivo dentro de Google Drive, es posible que el archivo se deshabilite debido a un error: http://www.openradar.me/24187873