Sandboxing-ul pe iOS face platforma mult mai sigură și acest lucru este în beneficiul tuturor utilizatorilor platformei. Cu toate acestea, datorită regulilor stricte inerente sandboxingului, împărtășirea datelor între aplicații nu este banală. O clasă adesea ignorată care ajută la partajarea documentelor între aplicații este UIDocumentInteractionController
clasă. În acest sfat rapid, vă voi arăta cum puteți utiliza această clasă pentru a examina documentele și pentru a deschide documente în alte aplicații instalate pe dispozitiv.
Trebuie să recunosc că am fost puțin surprins să descopăr asta UIDocumentInteractionController
a fost cu noi de la iOS 3.2. UIDocumentInteractionController
clasa este flexibilă în utilizarea sa și mai puternică decât majoritatea dintre noi realizăm. Nu numai că permite dezvoltatorilor să deschidă documente în alte aplicații instalate pe dispozitiv, de asemenea, acceptă previzualizarea, imprimarea, trimiterea prin e-mail și copierea documentelor.
Utilizarea UIDocumentInteractionController
clasa este simplă. Primul pas este de a inițializa o instanță a clasei invocând metoda sa de clasă unică, interactionControllerWithURL:
, și transmiterea adresei URL (NSURL
) a documentului cu care intenționați să lucrați. După setarea proprietății delegaților controlerului de interacțiune pentru documente, implementați metodele delegate corespunzătoare.
Rețineți că UIDocumentInteractionController
nu este o subclasă de UIViewController
. Cu alte cuvinte, chiar dacă examinarea unui document este mediată de UIDocumentInteractionController
, trebuie să spuneți controlerului interacțiunii documentului care vizualizează controlerul pentru a fi utilizat pentru examinarea documentului. Ce înseamnă exact acest lucru va deveni clar atunci când vom construi aplicația de probă. În exemplul de aplicație, vă voi arăta cum să (1) previzualizez un document și (2) să deschid un document într-o altă aplicație care acceptă tipul de fișier al documentului.
După cum am menționat deja acum, aplicația noastră va permite utilizatorilor să previzualizeze un document și să îl deschidă într-o altă aplicație instalată pe dispozitiv. Acesta din urmă este adesea foarte util dacă doriți să oferiți utilizatorilor mai multă flexibilitate în ceea ce privește ceea ce pot face cu datele stocate în aplicația dvs. Un exemplu obișnuit este deschiderea unei fotografii într-o aplicație de editare a fotografiilor, cum ar fi iPhoto.
Creați un nou proiect în Xcode selectând Vizualizare individuală șablon din lista de șabloane (figura 1). Denumiți aplicația Documente, introduceți un identificator al companiei, setați iPhone pentru familia de dispozitive și verificați Utilizați numărarea automată a referințelor. Restul casetelor de selectare pot fi lăsate neschimbate pentru acest proiect (figura 2). Spuneți Xcode unde doriți să salvați proiectul și apăsați pe Crea buton.
Interfața utilizator a aplicației noastre va conține două butoane, una pentru examinarea unui document PDF și una pentru deschiderea unui document PDF într-o altă aplicație. Înainte de a crea interfața cu utilizatorul, creați o acțiune pentru fiecare buton din fișierul de implementare al controlerului vizual, după cum se arată mai jos.
- (IBAction) previewDocument: (id) expeditor
- (IBAction) openDocument: (id) expeditor
Selectați MTViewController.xib și trageți doi UIButton
instanțe din Biblioteca de obiecte din dreapta în vizualizarea controlerului de vedere (figura 3). Selectează Proprietarul dosarului obiect din stânga, deschideți Conectarea inspectorului, și conectați acțiunile pe care le-am creat cu un moment în urmă cu butoanele (figura 4). Asta e tot ce trebuie să facem în Interface Builder.
Documentul cu care vom lucra este un document PDF. Puteți utiliza orice document PDF, dar am inclus un exemplu de document PDF cu fișierele sursă ale acestui sfat rapid. Este ghidul de programare iOS al Apple, pe care îl puteți găsi online. Glisați documentul în proiectul dvs. și asigurați-vă că bifați caseta de selectare Copiați articolele în dosarul grupului de destinație (dacă este necesar) când vi se solicită (figura 5). De asemenea, asigurați-vă că documentul este adăugat la Documente țintă (figura 5).
Atunci când utilizați UIDocumentInteractionController
clasă, este important să țineți cont de două lucruri, (1) trebuie să aveți o referință la controlerul de interacțiune a documentelor și (2) UIDocumentInteractionControllerDelegate
trebuie implementat un protocol. Începeți prin actualizarea fișierului antet al controlerului de vizualizare, după cum se arată mai jos, pentru a informa compilatorul că MTViewController
clasa este conformă cu UIDocumentInteractionControllerDelegate
protocol.
#import@ interfață MTViewController: UIViewController @Sfârșit
În fișierul de implementare a controlerului de vizualizare, adăugați o proprietate privată de tip UIDocumentInteractionController
și numește-o documentInteractionController
. Această proprietate va stoca referința la controlerul de interacțiune a documentelor pe care îl vom folosi.
Să analizăm acum punerea în aplicare a directivei previewDocument:
acțiune. Începem prin obținerea adresei URL (NSURL
) a documentului. Deoarece documentul face parte din pachetul de aplicații, obținerea adresei URL a documentului este foarte ușoară datorită metodei convenționale a documentului NSBundle
clasa (a se vedea mai jos).
- (IBAction) previewDocument: (id) expeditor NSURL * URL = [[NSBundle mainBundle] URLForResource: @ "eșantion" cu extensie: @ "pdf"]; dacă (URL) // Initializați controlerul de interacțiune a documentelor self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL: URL]; // Configurați controlerul de interacțiune a documentelor [self.documentInteractionController setDelegate: self]; // Previzualizare PDF [self.documentInteractionController presentPreviewAnimated: YES];
Dacă ne este restituită o adresă URL validă, inițializăm o instanță a UIDocumentInteractionController
și să treacă URL-ul documentului. Stocăm o referință la controlerul de interacțiune a documentelor în documentInteractionController
proprietatea pe care am creat-o acum un minut. Controlerul nostru de vizualizare va servi drept delegat al controlorului de interacțiune a documentelor. Prezentarea unei previzualizări a documentului PDF este la fel de ușor ca și apelarea presentPreviewAnimated:
pe controlerul de interacțiune a documentelor.
Dacă ați construit și rulați aplicația acum, ați observa că nu se întâmplă nimic când butonul etichetat previzualizare este lovit. Există o metodă delegată pe care trebuie să o implementăm mai întâi. Cu câteva minute în urmă, v-am spus că este important să realizați că UIDocumentInteractionController
clasa este o subclasă de NSObject
, nu UIViewController
. Chiar dacă va avea grijă să afișeze documentul, trebuie să-i spunem controlerului de interacțiune a documentului care îl văd pe controler să îl folosească pentru examinarea documentului. Una dintre metodele delegate ale UIDocumentInteractionControllerDelegate
protocol cere delegatului un controler de vizualizare pe care îl poate utiliza pentru a previzualiza documentul. Această metodă delegată este denumită corespunzător documentInteractionControllerViewControllerForPreview:
. Pentru că vrem să afișăm previzualizarea în controlerul nostru principal de vedere, putem reveni simplu de sine
după cum se arată în implementarea de mai jos. Ce înseamnă acest lucru este faptul că controlerul de interacțiune a documentelor va folosi controlerul de vizualizare pentru a examina documentul PDF. Acesta va prezenta o vedere modală în care prezintă documentul.
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controler return self;
Desigur, puteți modifica punerea în aplicare a documentInteractionControllerViewControllerForPreview:
pentru a se potrivi nevoilor dvs. Odată cu implementarea metodei delegate, este timpul să construim și să executăm aplicația pentru prima dată și să o încercăm (figura 6). Observați că puteți împărți chiar exemplarul documentului prin e-mail, imprimați-l sau copiați-l în clipboard. În plus, este posibil să deschideți documentul în orice altă aplicație care acceptă tipul de fișier al documentului. Apăsați butonul din partea dreaptă sus pentru a vedea ce vreau să spun (figura 7).
În multe situații, cu toate acestea, este mai adecvat să se permită utilizatorilor să deschidă un document într-o altă aplicație fără a prezenta mai întâi o previzualizare a documentului. Pentru a face acest lucru posibil în aplicația noastră de probă, trebuie să implementăm OpenDocument:
acțiune. Ca și în previewDocument:
acțiune, vom obține adresa URL a exemplului fișier PDF în pachetul de aplicații și îl vom folosi pentru a inițializa o instanță a UIDocumentInteractionController
clasă. După setarea delegatului dispozitivului de control al interacțiunii cu documente, prezentăm un meniu apelând presentOpenInMenuFromRect: Inview:
pe controlerul de interacțiune a documentelor. CGRect
pe care le transmitem ca primul argument este cadrul butonului, după cum puteți vedea în fragmentul de cod de mai jos.
- (IBAction) openDocument: (id) expeditor UIButton * button = (UIButton *) expeditor; NSURL * URL = [[NSBundle mainBundle] URLForResource: @ "eșantion" cu extensie: @ "pdf"]; dacă (URL) // Initializați controlerul de interacțiune a documentelor self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL: URL]; // Configurați controlerul de interacțiune a documentelor [self.documentInteractionController setDelegate: self]; // Prezent în Deschidere în meniu [self.documentInteractionController presentOpenInMenuFromRect: [buton cadru] inView: self.view animat: YES];
Pentru a testa OpenDocument:
acțiune, este important să executați aplicația de probă pe un dispozitiv fizic. Motivul este simplu. Sistemul de operare verifică ce aplicații din dispozitiv acceptă tipul de fișier (UTI) pe care dorim să-l deschidem. Dacă nu poate găsi aplicații care să suporte tipul de fișier corespunzător, atunci nu se va afișa niciunul Deschide în și ceea ce se va întâmpla în Simulatorul iOS.
Pentru a testa această caracteristică, asigurați-vă că aveți o aplicație instalată pe dispozitivul fizic care acceptă documente PDF, cum ar fi aplicația Dropbox sau Amazon Kindle.
După cum puteți vedea, este foarte ușor să examinați și să deschideți documente utilizând UIDocumentInteractionController
clasă. Vă recomandăm să explorați referințele de clasă, precum și UIDocumentInteractionControllerDelegate
protocol. Există multe alte metode delegate care ar putea fi utile, mai ales când lucrați cu documente mai mari sau cu fluxuri complexe de lucru.