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).

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