Открытие нескольких документов в приложении на основе UIDocumentBrowserViewController

Документация Apple тонкая на предмет UIDocumentBrowserViewController приложения, которые хотят поддерживать открытие нескольких документов одновременно.

Я хотел бы включить это, чтобы пользователь мог легко копировать / вставлять между двумя или более документами, не выходя обратно в браузер документов, что не является гибким опытом для iOS.

Помимо краткого описания allowsPickingMultipleItems собственности, я не мог ничего найти.

Для просмотра одного документа Apple рекомендует модальное представление, но больше ничего не говорит.

Вопросы

  1. Какой (если таковой имеется) рекомендуемый способ реализации опыта и пользовательского интерфейса нескольких открытых документов?
  2. Есть ли способ для пользователя, чтобы открыть набор документов, а затем открыть другой документ, сохраняя существующие документы открытыми?
  3. Есть ли приложения, которые реализуют такой опыт?

1 ответ

Я - относительно новый разработчик iOS, так что воспринимайте все это с недоверием.

Следующее работало для меня:

  1. установите для параметра allowPickingMultipleItems значение true
  2. создать ViewController, который может принимать входные данные URLи другой, который может принять вход [URL], Эти ViewControllers должны затем показать документ (ы), связанные с URL(ами) на экране.
    • один ViewController, который может обрабатывать один или несколько документов, также будет работать.
  3. в documentBrowser(_:, didPickDocumentURLs:)проверь сколько URLs были переданы, и представляют один из вышеупомянутых ViewControllers (при необходимости)

пример:

class DocumentBrowserViewController: UIDocumentBrowserViewController, UIDocumentBrowserViewControllerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    delegate = self
    allowsDocumentCreation = false
    allowsPickingMultipleItems = true

    // -snip-

}

// MARK: UIDocumentBrowserViewControllerDelegate

// -snip-

func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL]) {
    if documentURLs.count < 1 {
        return
    } else if documentURLs.count == 1 {
        presentDocument(at: documentURLs[0])
    } else {
        presentDocuments(at: documentURLs)
    }
}

// -snip-

// MARK: Document Presentation

func presentDocument(at documentURL: URL) {
    // present one document

    // example:
    // let vc = SingleDocumentViewController()
    // vc.documentURL = documentURL
    // present(vc, animated: true, completion: nil)
}
func presentDocuments(at documentURLs: [URL] {
    // present multiple documents

    // example:
    // let vc = MultipleDocumentViewController()
    // vc.documentURLs = documentURLs
    // present(vc, animated: true, completion: nil)
}
}

Чтобы ответить на ваши дополнительные вопросы:

  1. Я не уверен, как это рекомендуется для реализации этой функциональности
  2. Я думаю, что открытие одного, а затем другого документа может быть более подходящим для UIDocumentPickerViewController
  3. Я не знаю ни о каких приложениях, которые реализуют этот опыт с несколькими документами. Однако из проб и ошибок я знаю, что браузер документов выглядит так же, как обычно, но с кнопкой "Выбрать" в правом верхнем углу. После нажатия этой кнопки пользователи могут выбрать документы и папки для открытия или "выбрать все".

Некоторые предостережения:

  • Если выбрана папка, а папка не находится в собственном каталоге приложения, приложению не будет предоставлен доступ к документам внутри папки.

Замечания:documentBrowser(_:, didPickDocumentURLs:) будет переименован documentBrowser(_: didPickDocumentsAt:) в iOS 12

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