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 у режимі експорту з 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. Контролер покаже документ на весь екран із можливістю гортання. Делегат повинен реалізувати метод previewControllerForDocumentInteractionController, який повертає UIViewController для відображення.
UIDocumentInteractionControllerDelegate керує відображенням і приховуванням меню та Preview. Делегат реалізує опціональні методи: documentInteractionControllerWillPresentOpenInMenu для анімації появи, documentInteractionControllerDidDismissOpenInMenu для очищення ресурсів після закриття меню.
Важливий метод для Preview — previewControllerForDocumentInteractionController, який повинен повернути UIViewController для відображення документа. Якщо метод не реалізовано або повертає nil, Preview не запуститься. Зазвичай повертається self або UINavigationController, що містить self.
Контролер також підтримує метод documentInteractionController:didEndSendingToApplication, який викликається після успішної передачі файлу в інший застосунок. Це дозволяє виконати очищення тимчасового файлу або оновити інтерфейс після повернення в застосунок.
UIDocumentInteractionController і UIDocumentPickerViewController вирішують різні завдання, хоча обидва працюють із документами. Основна відмінність: UIDocumentInteractionController передає наявний файл іншому застосунку, а UIDocumentPickerViewController вибирає файл із зовнішнього джерела для поточного застосунку.
| Параметр | UIDocumentInteractionController | UIDocumentPickerViewController |
|---|---|---|
| Призначення | Надіслати файл в інший застосунок | Вибрати файл з іншого джерела |
| Джерело | Власний файл застосунку | Будь-яке сховище (iCloud, Файли, сторонні) |
| Режим | Копія файлу отримувачу | Імпорт або Експорт для поточного застосунку |
| Інтерфейс | Системне меню (Action Sheet) | Повноцінний браузер файлів |
| Повернення | Не повертає результат | URL вибраного файлу через делегата |
UIDocumentInteractionController не вимагає делегата для базової роботи — меню відобразиться навіть без реалізації методів. UIDocumentPickerViewController без делегата марний — результат вибору не буде оброблено. Вибір API залежить від сценарію: надсилання файлу → UIDocumentInteractionController, отримання файлу → UIDocumentPickerViewController.
Часті запитання
UIDocumentInteractionController — це контролер UIKit для попереднього перегляду документів і передачі файлів між застосунками через функцію Open In і вбудований Preview.
Створіть екземпляр, встановіть властивість url на цільовий файл, вкажіть делегата та викличте presentOptionsMenu. Система покаже список застосунків, що підтримують даний тип файлу.
UIDocumentInteractionController Preview — вбудований переглядач для одного документа з базовими можливостями. Quick Look (QLPreviewController) — окремий фреймворк із підтримкою пакетного перегляду, розширень і додаткових форматів файлів.
Делегат опціональний для базової роботи — меню відобразиться без нього. Делегат обов'язковий тільки для Preview (метод previewControllerForDocumentInteractionController) і для відстеження завершення надсилання файлу.
UIDocumentInteractionController надсилає наявний файл із застосунку в інший. UIDocumentPickerViewController вибирає файл із зовнішнього джерела в поточний застосунок. Перший — для надсилання, другий — для отримання.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також