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 у режимі експорту з 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. Контролер покаже документ на весь екран із можливістю гортання. Делегат повинен реалізувати метод previewControllerForDocumentInteractionController, який повертає UIViewController для відображення.

UIDocumentInteractionControllerDelegate та життєвий цикл

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

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

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

Відмінності від UIDocumentPickerViewController

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

ПараметрUIDocumentInteractionControllerUIDocumentPickerViewController
ПризначенняНадіслати файл в інший застосунокВибрати файл з іншого джерела
ДжерелоВласний файл застосункуБудь-яке сховище (iCloud, Файли, сторонні)
РежимКопія файлу отримувачуІмпорт або Експорт для поточного застосунку
ІнтерфейсСистемне меню (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?

Делегат опціональний для базової роботи — меню відобразиться без нього. Делегат обов'язковий тільки для 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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