iOS SDK Forhåndsvisning og åpning av dokumenter

Sandboxing på iOS gjør plattformen mye sikrere, og dette til nytte fordeler hver bruker av plattformen. På grunn av de strenge regler som er forbundet med sandboxing, er det imidlertid ikke trivielt å dele data mellom applikasjoner. En ofte oversett klasse som hjelper med å dele dokumenter mellom applikasjoner er UIDocumentInteractionController klasse. I dette raske tipset vil jeg vise deg hvordan du kan bruke denne klassen til å forhåndsvise dokumenter, samt åpne dokumenter i andre programmer installert på enheten.


Samhandling med dokumenter

Jeg må innrømme at jeg var litt overrasket over å oppdage det UIDocumentInteractionController har vært hos oss siden iOS 3.2. De UIDocumentInteractionController klassen er fleksibel i bruk og kraftigere enn de fleste av oss innser. Ikke bare gjør det at utviklere kan åpne dokumenter i andre programmer installert på enheten, den støtter også forhåndsvisning, utskrift, e-post og kopiering av dokumenter.

Bruker UIDocumentInteractionController klassen er grei. Det første trinnet er å initialisere en forekomst av klassen ved å bruke sin eneste klassemetode, interactionControllerWithURL:, og passerer nettadressen (NSURL) av dokumentet du har tenkt å jobbe med. Etter at du har satt inn dokumentkontaktkontrollens delegerte egenskap, implementerer du de riktige delegeringsmetodene.

Husk at UIDocumentInteractionController er ikke en underklasse av UIViewController. Med andre ord, selv om forhåndsvisning av et dokument er formidlet av UIDocumentInteractionController, du må fortelle dokumentkontaktkontrollen som viser kontrolleren for å bruke for å forhåndsvise dokumentet. Hva dette betyr, vil bli klart når vi bygger prøveapplikasjonen. I prøveapplikasjonen vil jeg vise deg hvordan du (1) forhåndsviser et dokument og (2) åpner et dokument i et annet program som støtter dokumentets filtype.


Trinn 1: Sette opp prosjektet

Som jeg nevnte for et øyeblikk, vil vår prøveapplikasjon tillate brukere å forhåndsvise et dokument og åpne det i et annet program som er installert på enheten. Sistnevnte er ofte svært nyttig hvis du vil gi brukerne mer fleksibilitet når det gjelder hva de kan gjøre med dataene som er lagret i søknaden din. Et vanlig eksempel er å åpne et bilde i et bilderedigeringsprogram, for eksempel iPhoto.

Opprett et nytt prosjekt i Xcode ved å velge Enkeltvisningsprogram mal fra listen over maler (figur 1). Navn søknaden din dokumenter, skriv inn en bedriftsidentifikator, sett iPhone for enhetens familie, og sjekk Bruk automatisk referansetelling. Resten av avmerkingsboksene kan stå ukontrollert for dette prosjektet (figur 2). Fortell Xcode hvor du vil lagre prosjektet og trykke på Skape knapp.


Figur 1
Figur 2

Trinn 2: Opprette brukergrensesnittet

Brukergrensesnittet i applikasjonen inneholder to knapper, en for forhåndsvisning av et PDF-dokument og en for å åpne et PDF-dokument i et annet program. Før vi lager brukergrensesnittet, opprett en handling for hver knapp i visningskontrollens implementeringsfil som vist nedenfor.

 - (IBAction) forhåndsvisningDokument: (id) avsender 
 - (IBAction) openDocument: (id) avsender 

Å velge MTViewController.xib og dra to UIButton forekomster fra Objektbibliotek til høyre i visningskontrollørens visning (figur 3). Velg Filens eier objekt til venstre, åpne Tilkoblingsinspektør, og koble til handlingene som vi opprettet for øyeblikket med knappene (figur 4). Det er alt vi trenger å gjøre i Interface Builder.


Figur 3
Figur 4

Trinn 3: Forhåndsvisning av et dokument

Dokumentet som vi skal jobbe med, er et PDF-dokument. Du kan bruke et hvilket som helst PDF-dokument, men jeg har tatt med et eksempel på PDF-dokument med kildefilene til denne raske tipsen. Det er Apples IOS Programmeringsveiledning, som du også kan finne online. Dra dokumentet inn i prosjektet ditt og sørg for å merke av i boksen merket Kopier elementer til målgruppens mappe (om nødvendig) når du blir bedt om det (figur 5). Kontroller også at dokumentet er lagt til i dokumenter mål (figur 5).


Figur 5

Når du bruker UIDocumentInteractionController klasse, er det viktig å holde to ting i bakhodet, (1) du må holde en referanse til dokumentinteraksjonskontrolleren og (2) UIDocumentInteractionControllerDelegate protokollen må implementeres. Begynn med å oppdatere visningskontrollens headerfil som vist nedenfor for å informere kompilatoren om at MTViewController klassen stemmer overens med UIDocumentInteractionControllerDelegate protokollen.

 #importere  @interface MTViewController: UIViewController  @slutt

I visningsregulatorens implementeringsfil legger du til en privat eiendom av typen UIDocumentInteractionController og nev det documentInteractionController. Denne egenskapen lagrer referansen til dokumentinteraksjonskontrolleren som vi skal bruke.

La oss nå se på implementeringen av previewDocument: handling. Vi starter med å oppnå nettadressen (NSURL) av dokumentet. Fordi dokumentet er en del av applikasjonspakken, er det svært enkelt å skaffe dokumentets URL takket være en praktisk metode for NSBundle klasse (se nedenfor).

 - (IBAction) previewDocument: (id) sender NSURL * URL = [[NSBundle mainBundle] URLForResource: @ "sample" withExtension: @ "pdf"]; hvis (URL) // Initialize Document Interaction Controller selv.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL: URL]; // Konfigurer dokumentinteraksjonscontroller [self.documentInteractionController setDelegate: self]; // Forhåndsvis PDF [self.documentInteractionController presentPreviewAnimated: YES]; 

Hvis en gyldig nettadresse returneres til oss, initierer vi en forekomst av UIDocumentInteractionController klasse og passere URL-adressen til dokumentet. Vi lagrer en referanse til dokumentinteraksjonskontrollen i documentInteractionController eiendom vi opprettet for et minutt siden. Visningsansvarlig vil fungere som delegat av dokumentets samspillskontroller. Å presentere en forhåndsvisning av PDF-dokumentet er like enkelt som å ringe presentPreviewAnimated: på dokumentkontaktkontrollen.

Hvis du skulle bygge og kjøre programmet nå, vil du legge merke til at ingenting skjer når knappen er merket Forhåndsvisning er tappet. Det er en delegatemetode som vi må implementere først. For noen minutter siden fortalte jeg deg at det er viktig å innse at UIDocumentInteractionController klassen er en underklasse av NSObject, ikke UIViewController. Selv om det vil ta seg av å vise dokumentet, må vi fortelle dokumentkontaktkontrollen som viser kontrolleren for å bruke for å forhåndsvise dokumentet. En av de delegerte metodene til UIDocumentInteractionControllerDelegate protokollen spør delegaten til en visningskontroller som den kan bruke til å forhåndsvise dokumentet. Den delegerte metoden er hensiktsmessig kalt documentInteractionControllerViewControllerForPreview:. Fordi vi vil vise forhåndsvisningen i hovedvisningen kontrolleren, kan vi enkelt returnere selv- som vist i implementeringen nedenfor. Hva dette betyr er at dokumentinteraksjonskontrolleren vil bruke visningsregulatoren til å forhåndsvise PDF-dokumentet. Den vil presentere en modal visning der den presenterer dokumentet.

 - (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) kontrolleren return self; 

Selvfølgelig kan du endre implementeringen av documentInteractionControllerViewControllerForPreview: for å passe dine behov. Med delegatemetoden implementert, er det på tide å bygge og kjøre vår søknad for første gang og prøve den ut (figur 6). Legg merke til at du kan dele testdokumentet via e-post, skrive ut det eller kopiere det til utklippstavlen. I tillegg er det mulig å åpne dokumentet i et hvilket som helst annet program som støtter dokumentets filtype. Trykk på knappen øverst til høyre for å se hva jeg mener (figur 7).


Figur 6
Figur 7

Trinn 4: Åpne et dokument

I mange situasjoner er det imidlertid mer hensiktsmessig å tillate brukere å åpne et dokument i et annet program uten å først vise en forhåndsvisning av dokumentet. For å gjøre dette mulig i vårt eksempelprogram, må vi implementere Opendocument: handling. Som i previewDocument: handling, får vi URL-adressen til PDF-dokumentet i applikasjonspakken og bruker den til å initialisere en forekomst av UIDocumentInteractionController klasse. Etter å ha satt inn delegaten til dokumentinteraksjonskontrolleren, presenterer vi en meny ved å ringe presentOpenInMenuFromRect: Inview: på dokumentkontaktkontrollen. De CGRect at vi passerer som det første argumentet er rammen til knappen som du kan se i kodestykket nedenfor.

 - (IBAction) openDocument: (id) sender UIButton * button = (UIButton *) avsender; NSURL * URL = [[NSBundle mainBundle] URLForResource: @ "sample" withExtension: @ "pdf"]; hvis (URL) // Initialize Document Interaction Controller selv.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL: URL]; // Konfigurer dokumentinteraksjonscontroller [self.documentInteractionController setDelegate: self]; // Present Åpne i menyen [self.documentInteractionController presentOpenInMenuFromRect: [knappramme] inView: self.view animated: YES]; 

For å teste Opendocument: handling, er det viktig at du kjører prøveapplikasjonen på en fysisk enhet. Årsaken er enkel. Operativsystemet kontrollerer hvilke applikasjoner på enheten som støtter filtypen (UTI) som vi vil åpne. Hvis det ikke finner noen programmer som støtter den tilsvarende filtypen, vil den ikke vise en Åpne i menyen, og det er det som vil skje i iOS-simulatoren.

For å teste denne funksjonen må du kontrollere at du har et program installert på din fysiske enhet som aksepterer PDF-dokumenter, for eksempel Dropbox eller Amazons Kindle-applikasjon.


Figur 8

Konklusjon

Som du ser, er det veldig enkelt å forhåndsvise og åpne dokumenter ved hjelp av UIDocumentInteractionController klasse. Jeg anbefaler at du undersøker klassenes referanse så vel som UIDocumentInteractionControllerDelegate protokoll. Det er mange flere delegerte metoder som kan komme til nytte, spesielt når du jobber med større dokumenter eller komplekse arbeidsflyter.