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. Контролерът ще покаже документа на цял екран с възможност за прелистване. Делегатът трябва да реализира метода previewControllerForDocumentInteractionController, който връща UIViewController за показване.
UIDocumentInteractionControllerDelegate управлява показването и скриването на менюто и Preview. Делегатът реализира опционални методи: documentInteractionControllerWillPresentOpenInMenu за анимация на появяване, documentInteractionControllerDidDismissOpenInMenu за почистване на ресурси след затваряне на менюто.
Важен метод за Preview — previewControllerForDocumentInteractionController, който трябва да върне UIViewController за показване на документа. Ако методът не е реализиран или връща nil, Preview няма да стартира. Обикновено се връща self или UINavigationController, съдържащ self.
Контролерът също поддържа метода documentInteractionController:didEndSendingToApplication, който се извиква след успешно предаване на файла на друго приложение. Това позволява почистване на временния файл или актуализиране на интерфейса след връщане в приложението.
UIDocumentInteractionController и UIDocumentPickerViewController решават различни задачи, въпреки че и двата работят с документи. Основната разлика: UIDocumentInteractionController предава съществуващ файл на друго приложение, а UIDocumentPickerViewController избира файл от външен източник за текущото приложение.
| Параметър | UIDocumentInteractionController | UIDocumentPickerViewController |
|---|---|---|
| Предназначение | Изпращане на файл към друго приложение | Избиране на файл от друг източник |
| Източник | Собствен файл на приложението | Всяко хранилище (iCloud, Файлове, трети страни) |
| Режим | Копие на файла за получателя | Import или Export за текущото приложение |
| Интерфейс | Системно меню (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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също