iOS 11 - UIDocumentBrowserViewController создать новый документ с помощью шаблона Chooser, как настроить?
У меня есть существующее приложение на основе документов Objective-C, в котором я заменил свой предыдущий файловый менеджер новым UIDocumentBrowserViewController, и все работает, за исключением того, что я абсолютно озадачен тем, как создать новый документ с помощью выбора шаблонов. Согласно видео WWDC 2017 "Создание отличных приложений на основе документов в iOS 11", вы должны подходить к нему так:
func documentBrowser(_ controller: UIDocumentBrowserViewController, didRequestDocumentCreationWithHandler importHandler: @escaping (URL?, UIDocumentBrowserViewController.ImportMode) -> Swift.Void)
{
presentTemplateChooser(completion: {templateURL, canceled) in
if let templateURL = templateURL
{
importHandler(templateURL, .copy)
}
else
{
importHandler(nil, .none)
}
}
Что имеет смысл для меня, так это представление "Выбор шаблона", но что для меня не имеет смысла, так это то, что у меня есть кнопка "Готово" и "Отмена" в окне выбора шаблона; но как мне узнать, когда пользователь нажимает "Готово" или "Отмена" в "Выборке шаблона" и передает это в функцию делегата? Кто-нибудь знает, как это осуществить (желательно) в Objective-C? (Но с Swift тоже все в порядке, просто пытаюсь понять, как работает этот процесс) Большое спасибо.
1 ответ
Я знаю, что вы просили Objective-C предпочтительно, но это пример шаблона опционов Swift. Если ваш метод presentTemplateChooser вызывает закрытие своего завершения без templateURL (т. Е. Он равен nil), то развертывание templateURL завершится неудачей (если let templateURL = templateURL вернет false).
Если вы хотите узнать, нажал ли пользователь кнопку "Отмена", вы можете сделать это следующим образом:
Создайте действие отмены следующим образом:
let cancel = UIAlertAction(title: "Cancel", style: .cancel) { _ in
completion(nil, true)
}
Метод в вашем вопросе должен быть:
func documentBrowser(_ controller: UIDocumentBrowserViewController, didRequestDocumentCreationWithHandler importHandler: @escaping (URL?, UIDocumentBrowserViewController.ImportMode) -> Swift.Void)
{
presentTemplateChooser(completion: {templateURL, canceled) in
if canceled {
print("User canceled")
}
if let templateURL = templateURL
{
importHandler(templateURL, .copy)
}
else
{
importHandler(nil, .none)
}
}
Вы можете сделать все это в Objective-C. Вам просто нужно проверить на nil вместо распаковки для templateURL. (т.е. если templateURL!= nil вместо if templateURL = templateURL).