Как добавить кнопку назад или отменить, чтобы закрыть UIDocumentBrowser

Мне нужно представить UIDocumentBrowser для загрузки документа. Но я не могу разместить кнопку возврата или отмены на панели навигации. Изображение ниже - это скриншот файлового браузера в WhatsApp. Кто-нибудь может мне помочь?

введите описание изображения здесь

3 ответа

Решение

UIDocumentBrowserViewController предназначен для использования только в качестве корневого контроллера представления, поэтому у него нет кнопки "Назад" или "Отмена". Согласно документации:

https://developer.apple.com/documentation/uikit/view_controllers/adding_a_document_browser_to_your_app

Важный

Всегда назначайте браузер документов в качестве корневого контроллера вашего приложения. Не размещайте браузер документов в контроллере навигации, панели вкладок или в режиме разделенного просмотра и не отображайте браузер документов модально.

Если вы хотите представить браузер документов из другого места в иерархии представлений, используйте UIDocumentPickerViewController вместо.

Используйте CustomDocumentPickerViewController с черным внешним видом для UINavigationBar и UIBarButtonItem. Используйте приведенный ниже код

import UIKit

class CustomDocumentPickerViewController: UIDocumentPickerViewController {

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    UINavigationBar.appearance().tintColor = UIColor.black
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.black], for: .normal)
  }

  override func viewWillDisappear(_ animated: Bool) {

    UINavigationBar.appearance().tintColor = UIColor.white // your color
    UIBarButtonItem.appearance().setTitleTextAttributes(nil, for: .normal)
    super.viewWillDisappear(animated)

  }

}

Отличным решением для этой проблемы является добавление пользовательской кнопки с помощью свойства extraTrailingNavigationBarButtonItems или extraLeadingNavigationBarButtonItems . Пример ниже:

      let documentBrowser = UIDocumentBrowserViewController(forOpening: [.jpeg, .png])
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(didTapDocumentBrowserCancel))
documentBrowser.additionalTrailingNavigationBarButtonItems = [cancelButton]

Затем создайте функцию для закрытия браузера документов.

      @objc private func didTapDocumentBrowserCancel() {
    dismiss(animated: true)
}

Использованная литература:

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