DocumentPickerDelegate не работает после обновления до swift 3

Я пытался установить DocumentPicker для получения файла из iCloud, но на самом деле мое приложение открывает documentMenu для импорта файла (iCloud, Dropbox), и когда я выбираю iCloud, я представляю средство выбора документов со своими файлами. Когда мне приходится делегировать файл в documentPicker(_ ...), функция documentPicker.delegate=self.delegate никогда не вызывается, потому что мой класс не соответствует протоколу.

import UIKit

class ImportKeyViewController: UIViewController{
    @IBOutlet weak var openWithLabel: UILabel!
    @IBOutlet weak var transparentBackgroundView: UIView!
    @IBOutlet weak var iCloudButton: UIButton!
    @IBOutlet weak var iTunesButton: UIButton!

    weak var delegate : UIDocumentPickerDelegate?

    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL){
        print("Entre a documentPicker")
    }

    func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
       print("Sali a documentPicker")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print("llegue")
        setUpUI()
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        UIView.animate(withDuration: 0.1, animations: {
            self.transparentBackgroundView.backgroundColor = UIColor(red: 220/255, green: 220/255, blue: 220/255, alpha: 0.7)
        })
    }

    override func viewWillDisappear(_ animated: Bool) {
        UIView.animate(withDuration: 0.1, animations: {
            self.transparentBackgroundView.backgroundColor = UIColor.clear
        })
    }

    @IBAction func closeButtonAction(_ sender: UIButton) {

        let documentPicker = UIDocumentPickerViewController (documentTypes: ["public.text","public.content"], in: .import)
        documentPicker.delegate? = self.delegate!
        self.present(documentPicker, animated:true, completion: nil)

    }
}

У меня есть обязательные и дополнительные методы для UIDocumentPickerDelegate, но он не работает, как вы можете видеть на изображении ниже

Это мое первое приложение для iOS, надеюсь, вы мне поможете.

1 ответ

Вы должны добавить новый синтаксис didPickDocumentAt: Метод делегата, похоже, он немного изменился.

-- редактировать

Ваш ImportKeyViewController должен наследовать UIDocumentPickerDelegate, Хороший способ сделать это - создать расширение, чтобы было легко заметить, какие методы являются методами-делегатами, а какие - вашими.

Вот так:

extension ImportKeyViewController: UIDocumentPickerDelegate {

    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL){
        print("Entre a documentPicker")
    }

    func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
       print("Sali a documentPicker")
    }

}
Другие вопросы по тегам