簡體   English   中英

當使用swift3.0的按鈕動作時,如何在ios mobile中打開文檔文件eg(.pdf,.doc,.docx)?

[英]How to open the Document files e.g(.pdf,.doc,.docx) in ios mobile when a button action using swift3.0?

我需要打開UIDocumentPickerViewController並且它應該允許用戶選擇所有類型的文件。 ie.(.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*, 4*,

要打開文檔並選擇任何文檔,您正在使用UIDocumentPickerViewController然后如果用戶設備中連接了 Google Drive,則將顯示您的 iCloud、文件和 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) 

在你的行動方法中。

實際上,您還可以使用專為此特定目的而設計的QuickLook Framework來代替WebView 您只需傳遞文件的位置並符合協議。 它將呈現一個包含文檔的視圖控制器。

它支持以下文件:

- iWork 文檔(Pages、Numbers 和 Keynote)

- Microsoft Office 文檔(只要它們是使用 Office 97 或任何其他更新版本創建的)

- PDF文件

- 圖片

- 文本文件

- 富文本格式文檔

- 逗號分隔值文件 (csv)

是 APPCODA 的教程,描述了相同的內容。

是Apple OBJ-C版本提供的教程。

要在 Swift 中使用UIDocumentPickerViewController打開(.pdf, .doc, .docx)的特定文檔文件: 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM