Как настроить несколько UIDocumentPickers в одном VC

В одной VC, с которой я работаю, есть три кнопки, и каждая кнопка должна представлять средство выбора документов для разных типов носителей. У меня это настроено, но я не уверен, как это сделать, так это обработать мой метод делегата

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {

Как я могу отслеживать, какое средство выбора документов активировало метод делегата, поскольку каждая кнопка должна обрабатывать эту функцию по-разному? Я пытался использоватьcontroller.tag, но это не похоже на свойство UIDocumentPickerViewController. Любые указатели будут очень благодарны.

1 ответ

Решение

Вы можете создать 3 отдельных экземпляра UIDocumentPickerViewController в вашем контроллере представления и проверьте экземпляр controller в методе делегата.

private lazy var documentPicker1: UIDocumentPickerViewController = {
    let controller = UIDocumentPickerViewController()
    controller.delegate = self
    return controller
}()

private lazy var documentPicker2: UIDocumentPickerViewController = {
    let controller = UIDocumentPickerViewController()
    controller.delegate = self
    return controller
}()

private lazy var documentPicker3: UIDocumentPickerViewController = {
    let controller = UIDocumentPickerViewController()
    controller.delegate = self
    return controller
}()

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

    } else if controller == documentPicker2 {

    }
    ...
}

Или вы можете сохранить собственность в view controller чтобы отследить, какая кнопка была нажата, и проверить ее в методе делегата.

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