UIDocumentInteractionController — este un controler iOS pentru previzualizarea documentelor și partajarea fișierelor între aplicații. Acesta implementează funcția Open In, permițând utilizatorului să deschidă un fișier în orice aplicație compatibilă, să îl trimită prin e-mail sau să îl salveze în stocare în cloud. Conform Apple Developer Documentation (2025), controlerul suportă și Preview încorporat pentru vizualizarea PDF-urilor, imaginilor și documentelor de birou.
Principalele puncte
UIDocumentInteractionController — este o clasă UIKit care oferă o interfață de sistem pentru lucrul cu documentele. Spre deosebire de UIDocumentPickerViewController, care selectează fișiere, acest controler lucrează cu un fișier deja existent al aplicației și oferă utilizatorului acțiuni: previzualizare, deschidere în altă aplicație, imprimare sau trimitere.
Controlerul nu este un ViewController — nu se apelează prin present. În schimb, afișează meniul de sistem al acțiunilor prin metoda presentOptionsMenu sau presentPreview. Meniul arată toate aplicațiile înregistrate pentru procesarea acestui tip de fișier.
UIDocumentInteractionController este disponibil începând cu iOS 2.0 și este unul dintre cele mai vechi API-uri pentru lucrul cu documentele. În ciuda vechimii, rămâne relevant pentru implementarea funcției Open In și a previzualizării încorporate fără a utiliza biblioteci terțe.
Preview — este un vizualizator încorporat de documente oferit de UIDocumentInteractionController. Suportă PDF, imagini, fișiere text și documente de birou (inclusiv .doc, .xls, .ppt). Preview se afișează cu o animație de tranziție similară cu Quick Look standard.
Pentru a porni Preview, apelați metoda presentPreview. Controlerul necesită un delegat cu implementarea metodei previewControllerForDocumentInteractionController, care returnează un UIViewController pentru afișarea documentului. De obicei, se returnează self sau un controler de navigare.
Preview încorporat nu necesită framework-uri sau licențe suplimentare. Funcționează cu orice fișier al cărui URL a fost transmis proprietății url. Utilizatorul poate derula paginile PDF, poate scala imaginile și poate copia text din documente.
Open In — funcția cheie a UIDocumentInteractionController. Afișează lista aplicațiilor care pot deschide acest tip de fișier. Utilizatorul selectează aplicația țintă, iar iOS copiază fișierul în sandbox-ul acesteia, lansând aplicația pentru lucrul cu documentul.
Lista aplicațiilor se formează automat pe baza Document Type înregistrat în Info.plist al altor aplicații. Dacă o aplicație a înregistrat suport pentru PDF, va apărea în meniul Open In pentru fișiere PDF. Sistemul afișează și acțiuni standard: imprimare, trimitere prin e-mail, salvare în Fișiere.
Open In copiază fișierul — aplicația țintă primește propria copie, deci modificările nu se salvează înapoi în aplicația originală. Dacă este necesară editarea cu salvare, utilizați UIDocumentPickerViewController în modul export cu URL securizat.
Din iOS 6 este disponibil UIActivityViewController, care suportă și trimiterea de fișiere. Spre deosebire de UIDocumentInteractionController, UIActivityViewController afișează o foaie de acțiuni de sistem cu suport pentru AirDrop, e-mail, mesaje și UIActivity personalizate. Pentru trimiterea simplă de fișiere, se recomandă UIActivityViewController ca API mai modern.
Implementarea Open In prin UIDocumentInteractionController necesită doar câteva linii de cod: crearea unei instanțe, setarea URL-ului și a delegatului, apelarea presentOptionsMenu. Controlerul colectează automat lista aplicațiilor disponibile pe baza tipului de fișier.
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
)
}
}
Pentru a afișa vizualizatorul încorporat în locul meniului Open In, utilizați metoda presentPreview. Controlerul va afișa documentul pe ecran complet cu posibilitatea de derulare. Delegatul trebuie să implementeze metoda previewControllerForDocumentInteractionController, care returnează un UIViewController pentru afișare.
UIDocumentInteractionControllerDelegate gestionează afișarea și ascunderea meniului și Preview-ului. Delegatul implementează metode opționale: documentInteractionControllerWillPresentOpenInMenu pentru animația de apariție, documentInteractionControllerDidDismissOpenInMenu pentru curățarea resurselor după închiderea meniului.
Metoda importantă pentru Preview — previewControllerForDocumentInteractionController, care trebuie să returneze un UIViewController pentru afișarea documentului. Dacă metoda nu este implementată sau returnează nil, Preview nu va porni. De obicei, se returnează self sau un UINavigationController care conține self.
Controlerul suportă și metoda documentInteractionController:didEndSendingToApplication, care este apelată după transmiterea cu succes a fișierului către o altă aplicație. Aceasta permite curățarea fișierului temporar sau actualizarea interfeței după revenirea în aplicație.
UIDocumentInteractionController și UIDocumentPickerViewController rezolvă sarcini diferite, deși ambele lucrează cu documente. Diferența principală: UIDocumentInteractionController transmite un fișier existent către o altă aplicație, iar UIDocumentPickerViewController selectează un fișier dintr-o sursă externă pentru aplicația curentă.
| Parametru | UIDocumentInteractionController | UIDocumentPickerViewController |
|---|---|---|
| Scop | Trimite fișierul către altă aplicație | Selectează fișierul dintr-o altă sursă |
| Sursă | Fișierul propriu al aplicației | Orice stocare (iCloud, Fișiere, terță parte) |
| Mod | Copie a fișierului pentru destinatar | Import sau Export pentru aplicația curentă |
| Interfață | Meniul de sistem (Action Sheet) | Navigator de fișiere complet |
| Returnare | Nu returnează rezultat | URL-ul fișierului selectat prin delegat |
UIDocumentInteractionController nu necesită delegat pentru funcționarea de bază — meniul se va afișa chiar și fără implementarea metodelor. UIDocumentPickerViewController fără delegat este inutil — rezultatul selecției nu va fi procesat. Alegerea API-ului depinde de scenariu: trimitere fișier → UIDocumentInteractionController, primire fișier → UIDocumentPickerViewController.
Întrebări frecvente
UIDocumentInteractionController — este un controler UIKit pentru previzualizarea documentelor și transmiterea fișierelor între aplicații prin funcția Open In și Preview încorporat.
Creați o instanță, setați proprietatea url pe fișierul țintă, indicați delegatul și apelați presentOptionsMenu. Sistemul va afișa lista aplicațiilor care suportă acest tip de fișier.
UIDocumentInteractionController Preview — un vizualizator încorporat pentru un singur document cu capabilități de bază. Quick Look (QLPreviewController) — un framework separat cu suport pentru vizualizare în lot, extensii și formate de fișier suplimentare.
Delegatul este opțional pentru funcționarea de bază — meniul se va afișa fără el. Delegatul este obligatoriu doar pentru Preview (metoda previewControllerForDocumentInteractionController) și pentru urmărirea finalizării trimiterii fișierului.
UIDocumentInteractionController trimite un fișier existent din aplicație în alta. UIDocumentPickerViewController selectează un fișier dintr-o sursă externă în aplicația curentă. Primul — pentru trimitere, al doilea — pentru primire.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și