Using UIDocumentPickerViewController to import text in Swift

倖福魔咒の 提交于 2020-05-26 17:52:24

问题


I'm currently taking an iOS development course and as part of my project, I'm tasked with using UIDocumentPickerViewController to import text. Every example I've found is either a) written in Objective-C or b) is for importing UIImage files.

How do I set the delegate method for a text file?

Here's what I've got so far:

I have the iCloud capability set up. Works

The delegate is specified, as follows:

class MyViewController: UIViewController, UITextViewDelegate, UIDocumentPickerDelegate

I have the property set up for the type of text I'm trying to import:

@IBOutlet weak var newNoteBody: UITextView!

I have an IBAction setup as follows:

@IBAction func importItem(sender: UIBarButtonItem) {

    var documentPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(documentTypes: [kUTTypeText as NSString], inMode: UIDocumentPickerMode.Import)
    documentPicker.delegate = self
    documentPicker.modalPresentationStyle = UIModalPresentationStyle.FullScreen
    self.presentViewController(documentPicker, animated: true, completion: nil)

}

I can't figure out what the line should be below. The documentation on Apple's website isn't clear and every example I've found is in Objective-C or is for images.

// MARK: - UIDocumentPickerDelegate Methods

func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL) {
    if controller.documentPickerMode == UIDocumentPickerMode.Import {
        // What should be the line below?
        self.newNoteBody.text = UITextView(contentsOfFile: url.path!)
    }
}

回答1:


Got it! I had two problems:

1) Apple says you've gotta specify UTI's in an array. I called the documentType a KUTTypeText. It should be a "public.text" in the array.

Here's Apple's listing of Uniform Text Identifiers (UTIs)

@IBAction func importItem(sender: UIBarButtonItem) {

    var documentPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(documentTypes: ["public.text"], inMode: UIDocumentPickerMode.Import)
    documentPicker.delegate = self
    documentPicker.modalPresentationStyle = UIModalPresentationStyle.FullScreen
    self.presentViewController(documentPicker, animated: true, completion: nil)

}

The second problem was a syntactic issue on the Delegate, solved with this:

// MARK: - UIDocumentPickerDelegate Methods

func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL) {
    if controller.documentPickerMode == UIDocumentPickerMode.Import {
        // This is what it should be
        self.newNoteBody.text = String(contentsOfFile: url.path!)
    }
}


来源:https://stackoverflow.com/questions/28641325/using-uidocumentpickerviewcontroller-to-import-text-in-swift

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!