UIDocumentInteractionController — это контроллер iOS для предварительного просмотра документов и обмена файлами между приложениями. Он реализует функцию Open In, позволяя пользователю открыть файл в любом совместимом приложении, отправить по почте или сохранить в облачное хранилище. По данным Apple Developer Documentation (2025), контроллер также поддерживает встроенный Preview для просмотра PDF, изображений и офисных документов.
Главное
UIDocumentInteractionController — это класс UIKit, предоставляющий системный интерфейс для работы с документами. В отличие от UIDocumentPickerViewController, который выбирает файлы, этот контроллер работает с уже имеющимся файлом приложения и предлагает пользователю действия: предпросмотр, открытие в другом приложении, печать или отправка.
Контроллер не является ViewController — он не вызывается через present. Вместо этого он отображает системное меню действий через метод presentOptionsMenu или presentPreview. Меню показывает все приложения, зарегистрированные для обработки данного типа файла.
UIDocumentInteractionController доступен начиная с iOS 2.0 и является одним из старейших API для работы с документами. Несмотря на возраст, он остаётся актуальным для реализации функции Open In и встроенного предпросмотра без подключения сторонних библиотек.
Preview — это встроенный просмотрщик документов, предоставляемый UIDocumentInteractionController. Он поддерживает PDF, изображения, текстовые файлы и офисные документы (включая .doc, .xls, .ppt). Preview отображается анимацией перехода, аналогичной стандартному Quick Look.
Для запуска Preview вызовите метод presentPreview. Контроллеру требуется делегат с реализацией метода previewControllerForDocumentInteractionController, который возвращает UIViewController для отображения документа. Обычно возвращается self или навигационный контроллер.
Встроенный Preview не требует дополнительных фреймворков или лицензий. Он работает с любым файлом, URL которого передан в свойство url. Пользователь может пролистывать страницы PDF, масштабировать изображения и копировать текст из документов.
Open In — ключевая функция UIDocumentInteractionController. Она отображает список приложений, которые могут открыть данный тип файла. Пользователь выбирает целевое приложение, и iOS копирует файл в его песочницу, запуская приложение для работы с документом.
Список приложений формируется автоматически на основе зарегистрированных Document Type в Info.plist других приложений. Если приложение зарегистрировало поддержку PDF, оно появится в меню Open In для PDF-файлов. Система также показывает стандартные действия: печать, отправка по почте, сохранение в Файлы.
Open In копирует файл — целевое приложение получает собственную копию, поэтому изменения не сохраняются обратно в исходное приложение. Если требуется редактирование с сохранением, используйте UIDocumentPickerViewController в режиме export с security-scoped URL.
С iOS 6 появился UIActivityViewController, который также поддерживает отправку файлов. В отличие от UIDocumentInteractionController, UIActivityViewController показывает системный лист действий с поддержкой AirDrop, почты, сообщений и кастомных UIActivity. Для простой отправки файлов рекомендуется UIActivityViewController как более современный API.
Реализация Open In через UIDocumentInteractionController требует всего несколько строк кода: создать экземпляр, указать URL и делегата, вызвать presentOptionsMenu. Контроллер автоматически собирает список доступных приложений на основе типа файла.
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
)
}
}
Для отображения встроенного просмотрщика вместо меню Open In используйте метод presentPreview. Контроллер покажет документ на весь экран с возможностью пролистывания. Delegat должен реализовать метод previewControllerForDocumentInteractionController, возвращающий UIViewController для отображения.
UIDocumentInteractionControllerDelegate управляет отображением и скрытием меню и Preview. Делегат реализует опциональные методы: documentInteractionControllerWillPresentOpenInMenu для анимации появления, documentInteractionControllerDidDismissOpenInMenu для очистки ресурсов после закрытия меню.
Важный метод для Preview — previewControllerForDocumentInteractionController, который должен вернуть UIViewController для отображения документа. Если метод не реализован или возвращает nil, Preview не запустится. Обычно возвращается self или UINavigationController, содержащий self.
Контроллер также поддерживает метод documentInteractionController:didEndSendingToApplication, который вызывается после успешной передачи файла в другое приложение. Это позволяет выполнить очистку временного файла или обновить интерфейс после возврата в приложение.
UIDocumentInteractionController и UIDocumentPickerViewController решают разные задачи, хотя оба работают с документами. Основное различие: UIDocumentInteractionController передаёт существующий файл другому приложению, а UIDocumentPickerViewController выбирает файл из внешнего источника для текущего приложения.
| Параметр | UIDocumentInteractionController | UIDocumentPickerViewController |
|---|---|---|
| Назначение | Отправить файл в другое приложение | Выбрать файл из другого источника |
| Источник | Свой файл приложения | Любое хранилище (iCloud, Files, сторонние) |
| Режим | Копия файла получателю | Import или Export для текущего приложения |
| Интерфейс | Системное меню (Action Sheet) | Полноценный браузер файлов |
| Возврат | Не возвращает результат | URL выбранного файла через делегата |
UIDocumentInteractionController не требует делегата для базовой работы — меню отобразится даже без реализации методов. UIDocumentPickerViewController без делегата бесполезен — результат выбора не будет обработан. Выбор API зависит от сценария: отправка файла → UIDocumentInteractionController, получение файла → UIDocumentPickerViewController.
Часто задаваемые вопросы
UIDocumentInteractionController — это контроллер UIKit для предварительного просмотра документов и передачи файлов между приложениями через функцию Open In и встроенный Preview.
Создайте экземпляр, установите свойство url на целевой файл, укажите делегата и вызовите presentOptionsMenu. Система покажет список приложений, поддерживающих данный тип файла.
UIDocumentInteractionController Preview — встроенный просмотрщик для одного документа с базовыми возможностями. Quick Look (QLPreviewController) — отдельный фреймворк с поддержкой пакетного просмотра, расширений и дополнительных форматов файлов.
Делегат опционален для базовой работы — меню отобразится без него. Delegat обязателен только для Preview (метод previewControllerForDocumentInteractionController) и для отслеживания завершения отправки файла.
UIDocumentInteractionController отправляет существующий файл из приложения в другое. UIDocumentPickerViewController выбирает файл из внешнего источника в текущее приложение. Первый — для отправки, второй — для получения.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также