@ Velociround не может согласиться с этим, смеется

ужно открытьUIDocumentPickerViewController и это должно позволить пользователю выбирать все типы файлов. т.е.. (. pdf, .doc) файлы, которые я использовалUIDocumentPickerViewController метод. мой код:

UIDocumentPickerDelegate, UIDocumentMenuDelegate в моем объявлении класса

//загрузить файл

func OpenFile(){

    let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePNG),String(kUTTypeImage)], in: .import)
    importMenu.delegate = self
    importMenu.modalPresentationStyle = .fullScreen
    self.present(importMenu, animated: true, completion: nil)

}
@available(iOS 8.0, *)
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {        
    let cico = url as URL
    print("The Url is : \(cico)")

    do {
        let weatherData = try NSData(contentsOf: cico, options: NSData.ReadingOptions())
        print(weatherData)
        let activityItems = [weatherData]
        let activityController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
        if UI_USER_INTERFACE_IDIOM() == .phone {
            self.present(activityController, animated: true, completion: { _ in })
        }
        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)      


}

@available(iOS 8.0, *)
public 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)        

}

В этом коде приложение будет зависать. причина в томTerminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'You cannot initialize a UIDocumentPickerViewController except by the initWithDocumentTypes:inMode: and initWithURL:inMode: initializers.

Я не знаю, как инициализироватьinitWithDocumentTypes:inMode. Я новичок в iOS, кто-нибудь мне помочь ??? не могли бы вы мне помочь..

Ответы на вопрос(3)

WebView Вы также можете использоватьБеглый взгляд Фреймворк, который предназначен для этой конкретной цели. Вы просто передаете местоположение файла и соответствуете протоколам. Он представит контроллер представления с документом внутри.

Он поддерживает следующий файл:

- документы iWork (страницы, цифры и ключевые слова)

- документы Microsoft Office (если они были созданы с помощью Office 97 или любой другой более новой версии)

- PDF файлы

- Картинки

- текстовые файлы

- документы в Rich-Text формате

- Файлы значений, разделенных запятыми (CSV)

Вот учебник APPCODA, который описывает то же самое.

а также

Вот учебник, предоставленный версией Apple OBJ-C

 Umar Farooque02 мая 2018 г., 13:48
Здорово! Рад, что это помогло!
 aqsa arshad02 мая 2018 г., 13:27
Спас мой день! Потрясающие рамки.
 Velociround03 дек. 2018 г., 16:44
Это должен быть принятый ответ. QuickLook Framework - лучший способ визуализации документов без использования WebView.
 Umar Farooque03 дек. 2018 г., 18:17
@ Velociround не может согласиться с этим, смеется
Решение Вопроса

Чтобы открыть документ и выбрать любой документ, вы используетеUIDocumentPickerViewController тогда все документы, представленные в вашем iCloud, Files и в Google Диске, будут показаны, если Google Drive подключен к пользовательскому устройству. Затем выбранный документ необходимо загрузить в ваше приложение и оттуда вы можете показать его вWKWebView,

   @IBAction func uploadNewResumeAction(_ sender: Any) {

  /*  let documentPicker = UIDocumentPickerViewController(documentTypes: ["com.apple.iwork.pages.pages", "com.apple.iwork.numbers.numbers", "com.apple.iwork.keynote.key","public.image", "com.apple.application", "public.item","public.data", "public.content", "public.audiovisual-content", "public.movie", "public.audiovisual-content", "public.video", "public.audio", "public.text", "public.data", "public.zip-archive", "com.pkware.zip-archive", "public.composite-content", "public.text"], in: .import) */

    let documentPicker = UIDocumentPickerViewController(documentTypes: ["public.text", "com.apple.iwork.pages.pages", "public.data"], in: .import)

    documentPicker.delegate = self
    present(documentPicker, animated: true, completion: nil)
}

   extension YourViewController: UIDocumentPickerDelegate{


      func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {

                let cico = url as URL
                print(cico)
                print(url)

                print(url.lastPathComponent)

                print(url.pathExtension)

               }
   }

Примечание. Если вы собираетесь выбрать все файлы, используйте следующий код:

  let documentPicker = UIDocumentPickerViewController(documentTypes: ["com.apple.iwork.pages.pages", "com.apple.iwork.numbers.numbers", "com.apple.iwork.keynote.key","public.image", "com.apple.application", "public.item","public.data", "public.content", "public.audiovisual-content", "public.movie", "public.audiovisual-content", "public.video", "public.audio", "public.text", "public.data", "public.zip-archive", "com.pkware.zip-archive", "public.composite-content", "public.text"], in: .import) 

В вашем методе действий.

 mouni18 дек. 2017 г., 11:10
У меня есть ошибка Завершение работы приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «При выборе приложения для инициализации документа отсутствует разрешение iCloud. Установлены ли com.apple.developer.icloud-container-identifiers?
 Abhishek Mitra18 дек. 2017 г., 11:02
@Mouni хорошо, это очень легко, если вы можете выбрать документ изUIDocumentPickerViewController тогда вы получите путь к файлуprint(url) сверху код мой. и вам нужно посмотреть на этот ответ:stackoverflow.com/questions/47754252/... Затем этот файл нужно загрузить, как и любой другой, как загрузить изображения на сервер.
 Abhishek Mitra18 дек. 2017 г., 11:13
@mouni когда ты нашел аварию? в какой операции?
 mouni18 дек. 2017 г., 11:00
Привет Абхишек, тогда как загрузить документ на сервер.
 mouni18 дек. 2017 г., 11:17
Я использую uiactionsheet. когда я нажму на действие файла, произойдет сбой. В моем fileAction я могу использовать let documentPicker = UIDocumentPickerViewController (documentTypes: ["public.text", "com.apple.iwork.pages.pages", "public.data"], в: .import) documentPicker.delegate = self present (DocumentPicker, анимированный: правда, завершение: ноль)

Чтобы открыть конкретные файлы документов(.pdf, .doc, .docx) с помощьюUIDocumentPickerViewController в Swift: documentTypes будет

Импортироватьimport MobileCoreServices

["com.microsoft.word.doc","org.openxmlformats.wordprocessingml.document", kUTTypePDF as String]

Пример:

let importMenu = UIDocumentPickerViewController(documentTypes: ["com.microsoft.word.doc","org.openxmlformats.wordprocessingml.document", kUTTypePDF as String], in: UIDocumentPickerMode.import) 
importMenu.delegate = self 
self.present(importMenu, animated: true, completion: nil)
 ThE uSeFuL15 окт. 2018 г., 19:19
Вы знаете, как я мог получить его, чтобы выбрать Google документы?

Ваш ответ на вопрос