Внедрить подборщик документов в быстром (iOS)

Я хочу выбрать файл любого типа (.pdf,.docs,.xlsx,.jpeg,.txt,.rtf и т.д.) в моем приложении iOS. Нажав кнопку Загрузить, я хочу, чтобы мое приложение открыло каталог и выделило файлы (DocumentsPicker)

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

Любой подход сделать это в Swift?

Ответ 1

Используя возможности вашего проекта, включите iCloud и Key-Sharing.

enter image description here

Импортируйте MobileCoreServices в свой класс и, наконец, добавьте следующие три класса в свой UIViewController:

UIDocumentMenuDelegate,UIDocumentPickerDelegate,UINavigationControllerDelegate

Реализуйте следующие функции:

 public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
              guard let myURL = urls.first else {
                   return
              }
              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)
    }

Как все это назвать? Добавьте следующий фрагмент кода в функцию щелчка.

func clickFunction(){

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

Нажмите на кнопку. Появится следующее меню.

MenuPicker

В случае с DropBox. При нажатии на любой предмет. Вы будете перенаправлены обратно в свое приложение, а URL-адрес будет зарегистрирован в вашем терминале.

enter image description here

Манипулируйте documentTypes для ваших нужд. В моем приложении пользователи могут только Pdf. Итак, оденьтесь сами.

kUTTypePDF kUTTypePNG kUTTypeJPEG...

Также, если вы хотите настроить свою собственную строку меню. Добавьте следующий код и настройте свою собственную функцию внутри обработчика

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

enter image description here

Наслаждайся этим.

Ответ 2

Вы можете использовать UIDocumentPickerViewController для получения файлов из приложений "Файлы" или iCloud Drive.

  1. Активируйте Key-value storage и iCloud Documents iCloud из функции iCloud:

enter image description here

  1. Импортируйте следующую платформу в контроллер представления, для которого вы хотите открыть средство выбора документов:

    import MobileCoreServices
    
  2. UIDocumentPickerDelegate следующий метод из UIDocumentPickerDelegate:

    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
         // you get from the urls parameter the urls from the files selected
    }
    
  3. Создайте UIDocumentPickerViewController для отображения средства выбора файлов или 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)
    

    Если вы хотите, чтобы пользователь мог импортировать больше типов файлов в ваше приложение, вы должны добавить больше UTType к types NSArray. Чтобы увидеть все доступные типы, вы можете проверить UTType Docs

Когда средство выбора документов открывается в iOS 11 и вы пытаетесь выбрать файл на Google Диске, возможно, этот файл отключен из-за ошибки: http://www.openradar.me/24187873

Ответ 3

UIDocumentMenuViewController устарел с iOS11. Я также обнаружил, что он глючит при представлении из модального контроллера вида. Вот прямой способ использования сборщика:

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)
    }
}

Как обычно, не забудьте добавить поддержку iCloud: iCloud support

Ответ 4

Вы можете реализовать то, что вы описываете, используя NSURLSession.

Вам нужно будет ограничить целевой каталог, который вы укажете в каталоге документов приложения. Приложения не имеют полного доступа к файловой системе.

Ответ 5

это поможет вам реализовать функцию загрузки/выгрузки

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

Подробнее читайте Документация для Apple

Ответ 6

привет @Alexandros Я сделал то же самое, что вы упомянули выше, теперь я хочу сохранить это изображение или документ в базу данных, используя указанный URL-адрес, как это сделать, вы можете помочь с этим

Ответ 7

iCloud доступ ко всем типам файлов #

func openiCloudDocuments(){
    let importMenu = UIDocumentPickerViewController(documentTypes: [String("public.data")], in: .import)
    importMenu.delegate = self
    importMenu.modalPresentationStyle = .formSheet
    self.present(importMenu, animated: true, completion: nil)
}