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

UIDocumentInteractionControllerDelegate и жизнен цикъл

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

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

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

Разлики от UIDocumentPickerViewController

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

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

Делегатът е опционален за основна работа — менюто ще се покаже без него. Делегат е задължителен само за 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също