Открытие нескольких документов в приложении на основе UIDocumentBrowserViewController
Документация Apple тонкая на предмет UIDocumentBrowserViewController
приложения, которые хотят поддерживать открытие нескольких документов одновременно.
Я хотел бы включить это, чтобы пользователь мог легко копировать / вставлять между двумя или более документами, не выходя обратно в браузер документов, что не является гибким опытом для iOS.
Помимо краткого описания allowsPickingMultipleItems
собственности, я не мог ничего найти.
Для просмотра одного документа Apple рекомендует модальное представление, но больше ничего не говорит.
Вопросы
- Какой (если таковой имеется) рекомендуемый способ реализации опыта и пользовательского интерфейса нескольких открытых документов?
- Есть ли способ для пользователя, чтобы открыть набор документов, а затем открыть другой документ, сохраняя существующие документы открытыми?
- Есть ли приложения, которые реализуют такой опыт?
1 ответ
Я - относительно новый разработчик iOS, так что воспринимайте все это с недоверием.
Следующее работало для меня:
- установите для параметра allowPickingMultipleItems значение true
- создать ViewController, который может принимать входные данные
URL
и другой, который может принять вход[URL]
, Эти ViewControllers должны затем показать документ (ы), связанные с URL(ами) на экране.- один ViewController, который может обрабатывать один или несколько документов, также будет работать.
- в
documentBrowser(_:, didPickDocumentURLs:)
проверь сколькоURL
s были переданы, и представляют один из вышеупомянутых 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)
}
}
Чтобы ответить на ваши дополнительные вопросы:
- Я не уверен, как это рекомендуется для реализации этой функциональности
- Я думаю, что открытие одного, а затем другого документа может быть более подходящим для UIDocumentPickerViewController
- Я не знаю ни о каких приложениях, которые реализуют этот опыт с несколькими документами. Однако из проб и ошибок я знаю, что браузер документов выглядит так же, как обычно, но с кнопкой "Выбрать" в правом верхнем углу. После нажатия этой кнопки пользователи могут выбрать документы и папки для открытия или "выбрать все".
Некоторые предостережения:
- Если выбрана папка, а папка не находится в собственном каталоге приложения, приложению не будет предоставлен доступ к документам внутри папки.
Замечания:documentBrowser(_:, didPickDocumentURLs:)
будет переименован documentBrowser(_: didPickDocumentsAt:)
в iOS 12