Implement Document Picker in swift (iOS)

后端 未结 8 2179
滥情空心
滥情空心 2020-11-30 19:54

I want to pick a file of any type(.pdf, .docs, .xlsx, .jpeg, .txt, .rtf, etc) functionality in my iOS app. On clicking on Upload button, I want my app to op

8条回答
  •  半阙折子戏
    2020-11-30 20:25

    From your project's capabilities, enable both the iCloud and the Key-Sharing.

    Import MobileCoreServices in your class and then extend the following three classes inside your UIViewController:

    UIDocumentMenuDelegate,UIDocumentPickerDelegate,UINavigationControllerDelegate
    

    Implement the following functions:

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

    How do you call all of this? Add the following bit of code to your click function:

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

    Click your button. The following menu will pop up ..

    In the case of Dropbox. Upon clicking on any item. You will be redirected back to your app and the URL will be logged in your terminal.

    Manipulate the documentTypes to your need. In my app, Users permitted to Pdf only. So, suit yourself.

    kUTTypePDF kUTTypePNG kUTTypeJPEG ...

    Also if you feel like customizing your own menu bar. Add the following code and customize your own function inside the handler

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

    Enjoy it.

提交回复
热议问题