UIDocumentInteractionController — что это, Open In и документы

Автор: IT Sectr Опубликовано: 2026-07-11 Время чтения: 6 мин

UIDocumentInteractionController — это контроллер iOS для предварительного просмотра документов и обмена файлами между приложениями. Он реализует функцию Open In, позволяя пользователю открыть файл в любом совместимом приложении, отправить по почте или сохранить в облачное хранилище. По данным Apple Developer Documentation (2025), контроллер также поддерживает встроенный Preview для просмотра PDF, изображений и офисных документов.

Главное

  • UIDocumentInteractionController — контроллер iOS для просмотра и отправки документов в другие приложения.
  • Preview — встроенный просмотрщик PDF, изображений и офисных документов без переключения приложения.
  • Open In — функция передачи файла в другое приложение для редактирования или просмотра.
  • UIDocumentInteractionControllerDelegate управляет анимациями, позицией меню и завершением операций.
  • В отличие от UIDocumentPickerViewController, этот API не выбирает файлы, а передаёт существующие.

Что такое UIDocumentInteractionController?

UIDocumentInteractionController — это класс UIKit, предоставляющий системный интерфейс для работы с документами. В отличие от UIDocumentPickerViewController, который выбирает файлы, этот контроллер работает с уже имеющимся файлом приложения и предлагает пользователю действия: предпросмотр, открытие в другом приложении, печать или отправка.

Контроллер не является ViewController — он не вызывается через present. Вместо этого он отображает системное меню действий через метод presentOptionsMenu или presentPreview. Меню показывает все приложения, зарегистрированные для обработки данного типа файла.

UIDocumentInteractionController доступен начиная с iOS 2.0 и является одним из старейших API для работы с документами. Несмотря на возраст, он остаётся актуальным для реализации функции Open In и встроенного предпросмотра без подключения сторонних библиотек.

Режим Preview: встроенный просмотр документов

Preview — это встроенный просмотрщик документов, предоставляемый UIDocumentInteractionController. Он поддерживает PDF, изображения, текстовые файлы и офисные документы (включая .doc, .xls, .ppt). Preview отображается анимацией перехода, аналогичной стандартному Quick Look.

Для запуска Preview вызовите метод presentPreview. Контроллеру требуется делегат с реализацией метода previewControllerForDocumentInteractionController, который возвращает UIViewController для отображения документа. Обычно возвращается self или навигационный контроллер.

Встроенный Preview не требует дополнительных фреймворков или лицензий. Он работает с любым файлом, URL которого передан в свойство url. Пользователь может пролистывать страницы PDF, масштабировать изображения и копировать текст из документов.

Режим Open In: передача файлов между приложениями

Open In — ключевая функция UIDocumentInteractionController. Она отображает список приложений, которые могут открыть данный тип файла. Пользователь выбирает целевое приложение, и iOS копирует файл в его песочницу, запуская приложение для работы с документом.

Список приложений формируется автоматически на основе зарегистрированных Document Type в Info.plist других приложений. Если приложение зарегистрировало поддержку PDF, оно появится в меню Open In для PDF-файлов. Система также показывает стандартные действия: печать, отправка по почте, сохранение в Файлы.

Open In копирует файл — целевое приложение получает собственную копию, поэтому изменения не сохраняются обратно в исходное приложение. Если требуется редактирование с сохранением, используйте UIDocumentPickerViewController в режиме export с security-scoped URL.

Настройка UIActivityViewController как альтернатива

С iOS 6 появился UIActivityViewController, который также поддерживает отправку файлов. В отличие от UIDocumentInteractionController, UIActivityViewController показывает системный лист действий с поддержкой AirDrop, почты, сообщений и кастомных UIActivity. Для простой отправки файлов рекомендуется UIActivityViewController как более современный API.

Пример кода: Open In на Swift

Реализация Open In через UIDocumentInteractionController требует всего несколько строк кода: создать экземпляр, указать URL и делегата, вызвать presentOptionsMenu. Контроллер автоматически собирает список доступных приложений на основе типа файла.

swift
class DocumentViewController: UIViewController {

    lazy var interactionController = UIDocumentInteractionController()

    func shareFile(url: URL) {
        interactionController.url = url
        interactionController.uti = url.utiType()
        interactionController.delegate = self
        interactionController.presentOptionsMenu(
            from: self.view.bounds,
            in: self.view,
            animated: true
        )
    }
}

Запуск Preview вместо меню

Для отображения встроенного просмотрщика вместо меню Open In используйте метод presentPreview. Контроллер покажет документ на весь экран с возможностью пролистывания. Delegat должен реализовать метод previewControllerForDocumentInteractionController, возвращающий UIViewController для отображения.

UIDocumentInteractionControllerDelegate и жизненный цикл

UIDocumentInteractionControllerDelegate управляет отображением и скрытием меню и Preview. Делегат реализует опциональные методы: documentInteractionControllerWillPresentOpenInMenu для анимации появления, documentInteractionControllerDidDismissOpenInMenu для очистки ресурсов после закрытия меню.

Важный метод для Preview — previewControllerForDocumentInteractionController, который должен вернуть UIViewController для отображения документа. Если метод не реализован или возвращает nil, Preview не запустится. Обычно возвращается self или UINavigationController, содержащий self.

Контроллер также поддерживает метод documentInteractionController:didEndSendingToApplication, который вызывается после успешной передачи файла в другое приложение. Это позволяет выполнить очистку временного файла или обновить интерфейс после возврата в приложение.

Различия с UIDocumentPickerViewController

UIDocumentInteractionController и UIDocumentPickerViewController решают разные задачи, хотя оба работают с документами. Основное различие: UIDocumentInteractionController передаёт существующий файл другому приложению, а UIDocumentPickerViewController выбирает файл из внешнего источника для текущего приложения.

ПараметрUIDocumentInteractionControllerUIDocumentPickerViewController
НазначениеОтправить файл в другое приложениеВыбрать файл из другого источника
ИсточникСвой файл приложенияЛюбое хранилище (iCloud, Files, сторонние)
РежимКопия файла получателюImport или Export для текущего приложения
ИнтерфейсСистемное меню (Action Sheet)Полноценный браузер файлов
ВозвратНе возвращает результатURL выбранного файла через делегата

UIDocumentInteractionController не требует делегата для базовой работы — меню отобразится даже без реализации методов. UIDocumentPickerViewController без делегата бесполезен — результат выбора не будет обработан. Выбор API зависит от сценария: отправка файла → UIDocumentInteractionController, получение файла → UIDocumentPickerViewController.

Часто задаваемые вопросы

Что такое UIDocumentInteractionController в iOS?

UIDocumentInteractionController — это контроллер UIKit для предварительного просмотра документов и передачи файлов между приложениями через функцию Open In и встроенный Preview.

Как открыть файл в другом приложении через UIDocumentInteractionController?

Создайте экземпляр, установите свойство url на целевой файл, укажите делегата и вызовите presentOptionsMenu. Система покажет список приложений, поддерживающих данный тип файла.

Чем Preview отличается от Quick Look?

UIDocumentInteractionController Preview — встроенный просмотрщик для одного документа с базовыми возможностями. Quick Look (QLPreviewController) — отдельный фреймворк с поддержкой пакетного просмотра, расширений и дополнительных форматов файлов.

Нужно ли реализовывать делегата для UIDocumentInteractionController?

Делегат опционален для базовой работы — меню отобразится без него. Delegat обязателен только для Preview (метод previewControllerForDocumentInteractionController) и для отслеживания завершения отправки файла.

Чем UIDocumentInteractionController отличается от UIDocumentPickerViewController?

UIDocumentInteractionController отправляет существующий файл из приложения в другое. UIDocumentPickerViewController выбирает файл из внешнего источника в текущее приложение. Первый — для отправки, второй — для получения.

Итоги

  • UIDocumentInteractionController — контроллер iOS для просмотра и отправки файлов между приложениями, доступен с iOS 2.0.
  • Preview предоставляет встроенный просмотрщик PDF, изображений и офисных документов без сторонних библиотек.
  • Open In копирует файл в песочницу выбранного приложения — изменения не возвращаются в исходное приложение.
  • UIDocumentInteractionControllerDelegate управляет анимациями, позицией меню и завершением отправки через делегат-методы.
  • presentOptionsMenu отображает системное меню с доступными приложениями для данного типа файла.
  • UIActivityViewController является более современной альтернативой для отправки файлов с iOS 6.
  • Основное отличие от UIDocumentPickerViewController: первый передаёт файл из приложения, второй выбирает файл в приложение.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также