iOS SDK Vorschau und Öffnen von Dokumenten

Durch das Sandboxing unter iOS ist die Plattform wesentlich sicherer. Dies kommt letztlich allen Benutzern der Plattform zugute. Aufgrund der strengen Regeln des Sandboxing ist die gemeinsame Nutzung von Daten zwischen Anwendungen nicht trivial. Eine oft übersehene Klasse, die beim Freigeben von Dokumenten zwischen Anwendungen hilft, ist die UIDocumentInteractionController Klasse. In diesem kurzen Tipp zeige ich Ihnen, wie Sie mit dieser Klasse eine Vorschau der Dokumente anzeigen und Dokumente in anderen auf dem Gerät installierten Anwendungen öffnen können.


Mit Dokumenten interagieren

Ich muss zugeben, dass ich etwas überrascht war, als ich das entdeckte UIDocumentInteractionController ist seit iOS 3.2 bei uns. Das UIDocumentInteractionController Klasse ist flexibel in der Anwendung und leistungsfähiger als die meisten von uns wissen. Entwickler können nicht nur Dokumente in anderen auf dem Gerät installierten Anwendungen öffnen, sondern auch die Vorschau, das Drucken, das Versenden von E-Mails und das Kopieren von Dokumenten.

Verwendung der UIDocumentInteractionController Klasse ist unkompliziert. Der erste Schritt besteht darin, eine Instanz der Klasse durch Aufrufen ihrer einzigen Klassenmethode zu initialisieren, InteraktionControllerWithURL:, und Übergeben der URL (NSURL) des Dokuments, mit dem Sie arbeiten möchten. Nachdem Sie die Delegate-Eigenschaft des Document Interaction Controller festgelegt haben, implementieren Sie die entsprechenden Delegat-Methoden.

Denken Sie daran, dass die UIDocumentInteractionController ist keine Unterklasse von UIViewController. Mit anderen Worten, auch wenn die Vorschau eines Dokuments durch die Datei vermittelt wird UIDocumentInteractionController, Sie müssen dem Document Interaction Controller mitteilen, welcher View Controller für die Vorschau des Dokuments verwendet werden soll. Was dies genau bedeutet, wird beim Erstellen der Beispielanwendung deutlich. In der Beispielanwendung zeige ich Ihnen, wie Sie (1) ein Dokument in der Vorschau anzeigen und (2) ein Dokument in einer anderen Anwendung öffnen, die den Dateityp des Dokuments unterstützt.


Schritt 1: Einrichten des Projekts

Wie ich vorhin erwähnt habe, können Benutzer in unserer Beispielanwendung eine Vorschau des Dokuments anzeigen und es in einer anderen auf dem Gerät installierten Anwendung öffnen. Letzteres ist häufig sehr nützlich, wenn Sie Ihren Benutzern mehr Flexibilität hinsichtlich der Möglichkeiten bieten möchten, die mit den in Ihrer Anwendung gespeicherten Daten möglich sind. Ein häufiges Beispiel ist das Öffnen eines Fotos in einer Fotobearbeitungsanwendung wie iPhoto.

Erstellen Sie ein neues Projekt in Xcode, indem Sie das auswählen Einzelansicht-Anwendung Vorlage aus der Liste der Vorlagen (Abbildung 1). Benennen Sie Ihre Bewerbung Unterlagen, Geben Sie eine Firmenkennung ein iPhone für die Gerätefamilie und überprüfen Sie Verwenden Sie die automatische Referenzzählung. Die übrigen Kontrollkästchen können für dieses Projekt deaktiviert bleiben (Abbildung 2). Teilen Sie Xcode mit, wo Sie das Projekt speichern möchten, und drücken Sie die Erstellen Taste.


Abbildung 1
Figur 2

Schritt 2: Erstellen der Benutzeroberfläche

Die Benutzeroberfläche unserer Anwendung enthält zwei Schaltflächen, eine zur Vorschau eines PDF-Dokuments und eine zum Öffnen eines PDF-Dokuments in einer anderen Anwendung. Erstellen Sie vor dem Erstellen der Benutzeroberfläche eine Aktion für jede Schaltfläche in der Implementierungsdatei des View-Controllers (siehe unten).

 - (IBAction) previewDocument: (id) Absender 
 - (IBAction) openDocument: (ID) Absender 

Wählen MTViewController.xib und ziehen Sie zwei UIButton Instanzen aus dem Objektbibliothek rechts in der Ansicht des View-Controllers (Abbildung 3). Wähle aus Eigentümer der Datei Objekt auf der linken Seite, öffnen Sie die Verbindungsinspektor, und verbinden Sie die Aktionen, die wir vor einem Moment erstellt haben, mit den Schaltflächen (Abbildung 4). Das ist alles, was wir im Interface Builder tun müssen.


Figur 3
Figur 4

Schritt 3: Vorschau eines Dokuments

Das Dokument, mit dem wir arbeiten werden, ist ein PDF-Dokument. Sie können jedes PDF-Dokument verwenden, aber ich habe den Quelldateien dieses Schnelltipps ein Beispiel-PDF-Dokument beigefügt. Es ist Apples iOS-Programmierhandbuch, das Sie auch online finden können. Ziehen Sie das Dokument in Ihr Projekt und aktivieren Sie das Kontrollkästchen Elemente in den Ordner der Zielgruppe kopieren (falls erforderlich) wenn Sie dazu aufgefordert werden (Abbildung 5). Stellen Sie außerdem sicher, dass das Dokument dem Ordner hinzugefügt wird Unterlagen Ziel (Abbildung 5).


Abbildung 5

Bei Verwendung der UIDocumentInteractionController In dieser Klasse ist es wichtig, zwei Dinge zu beachten: (1) Sie müssen einen Verweis auf den Dokumentinteraktionscontroller halten und (2) den UIDocumentInteractionControllerDelegate Protokoll muss implementiert werden. Beginnen Sie mit der Aktualisierung der Header-Datei des View-Controllers (siehe unten), um den Compiler darüber zu informieren, dass die MTViewController Klasse entspricht der UIDocumentInteractionControllerDelegate Protokoll.

 #einführen  @interface MTViewController: UIViewController  @Ende

Fügen Sie in der Implementierungsdatei des View-Controllers eine private Eigenschaft des Typs hinzu UIDocumentInteractionController und nennen Sie es documentInteractionController. Diese Eigenschaft speichert den Verweis auf den Document Interaction Controller, den wir verwenden werden.

Betrachten wir nun die Implementierung der previewDocument: Aktion. Wir beginnen mit dem Abrufen der URL (NSURL) des Dokuments. Da das Dokument Teil des Anwendungspakets ist, ist das Abrufen der URL des Dokuments dank einer bequemen Methode sehr einfach NSBundle Klasse (siehe unten).

 - (IBAction) previewDocument: (id) sender NSURL * URL = [[NSBundle mainBundle] URLForResource: @ "sample" withExtension: @ "pdf"]; if (URL) // Document Interaction Controller initialisieren self.documentInteractionController = [UIDocumentInteractionControlleractionControllerWithURL: URL]; // Document Interaction Controller konfigurieren [self.documentInteractionController setDelegate: self]; // Vorschau auf PDF [self.documentInteractionController presentPreviewAnimated: YES]; 

Wenn eine gültige URL an uns zurückgegeben wird, initialisieren wir eine Instanz von UIDocumentInteractionController Klasse und übergeben Sie die URL des Dokuments. Wir speichern einen Verweis auf den Document Interaction Controller im documentInteractionController Eigentum, das wir vor einer Minute erstellt haben. Unser View Controller fungiert als Delegierter des Document Interaction Controllers. Das Anzeigen einer Vorschau des PDF-Dokuments ist so einfach wie das Aufrufen presentPreviewAnimated: auf dem Document Interaction Controller.

Wenn Sie die Anwendung jetzt erstellen und ausführen würden, würden Sie feststellen, dass nichts passiert, wenn die Schaltfläche beschriftet ist Vorschau wird angezapft. Es gibt eine Delegatmethode, die wir zuerst implementieren müssen. Vor ein paar Minuten habe ich Ihnen gesagt, dass es wichtig ist, das zu erkennen UIDocumentInteractionController Klasse ist eine Unterklasse von NSObject, nicht UIViewController. Obwohl es für die Anzeige des Dokuments sorgt, müssen Sie dem Document Interaction Controller mitteilen, welcher View Controller für die Vorschau des Dokuments verwendet werden soll. Eine der Delegatmethoden des UIDocumentInteractionControllerDelegate Protokoll fragt den Delegaten nach einem Ansichtscontroller, den er zur Vorschau des Dokuments verwenden kann. Diese Delegatmethode wird entsprechend benannt documentInteractionControllerViewControllerForPreview:. Da wir die Vorschau in unserem Hauptansicht-Controller anzeigen möchten, können Sie einfach zurückkehren selbst wie in der Implementierung unten gezeigt. Dies bedeutet, dass der Dokumentinteraktionscontroller unseren Ansichtscontroller zur Vorschau des PDF-Dokuments verwendet. Es wird eine modale Ansicht angezeigt, in der das Dokument dargestellt wird.

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

Natürlich können Sie die Implementierung von ändern documentInteractionControllerViewControllerForPreview: Ihren Bedürfnissen anpassen. Wenn die Delegat-Methode implementiert ist, ist es an der Zeit, unsere Anwendung zum ersten Mal zu erstellen, auszuführen und auszuprobieren (Abbildung 6). Beachten Sie, dass Sie das Beispieldokument sogar per E-Mail freigeben, drucken oder in die Zwischenablage kopieren können. Darüber hinaus ist es möglich, das Dokument in einer anderen Anwendung zu öffnen, die den Dateityp des Dokuments unterstützt. Tippen Sie auf die Schaltfläche oben rechts, um zu sehen, was ich meine (Abbildung 7)..


Abbildung 6
Abbildung 7

Schritt 4: Dokument öffnen

In vielen Situationen ist es jedoch sinnvoller, Benutzern das Öffnen eines Dokuments in einer anderen Anwendung zu ermöglichen, ohne dass zuvor eine Vorschau des Dokuments angezeigt wird. Um dies in unserer Beispielanwendung zu ermöglichen, müssen wir das implementieren openDocument: Aktion. Wie in der previewDocument: Aktion erhalten wir die URL des PDF-Beispieldokuments im Anwendungspaket und verwenden es zum Initialisieren einer Instanz von UIDocumentInteractionController Klasse. Nachdem Sie den Delegaten des Document Interaction Controller festgelegt haben, wird ein Menü durch Aufruf angezeigt presentOpenInMenuFromRect: inView: auf dem Document Interaction Controller. Das CGRect Dass wir als erstes Argument übergeben, ist der Rahmen der Schaltfläche, wie Sie im folgenden Codeausschnitt sehen können.

 - (IBAction) openDocument: (id) sender UIButton * button = (UIButton *) sender; NSURL * URL = [[NSBundle mainBundle] URLForResource: @ "sample" withExtension: @ "pdf"]; if (URL) // Document Interaction Controller initialisieren self.documentInteractionController = [UIDocumentInteractionControlleractionControllerWithURL: URL]; // Document Interaction Controller konfigurieren [self.documentInteractionController setDelegate: self]; // Present Open In Menu [self.documentInteractionController presentOpenInMenuFromRect: [Schaltflächenrahmen] inView: self.view animated: YES]; 

Um das zu testen openDocument: Aktion ist es wichtig, dass Sie die Beispielanwendung auf einem physischen Gerät ausführen. Der Grund ist einfach. Das Betriebssystem prüft, welche Anwendungen auf dem Gerät den Dateityp (UTI) unterstützen, den wir öffnen möchten. Wenn keine Anwendungen gefunden werden, die den entsprechenden Dateityp unterstützen, wird kein angezeigt Öffnen Sie in Menü und das wird im iOS-Simulator geschehen.

Um diese Funktion zu testen, stellen Sie sicher, dass auf Ihrem physischen Gerät eine Anwendung installiert ist, die PDF-Dokumente akzeptiert, z. B. Dropbox oder die Kindle-Anwendung von Amazon.


Abbildung 8

Fazit

Wie Sie sehen, ist es sehr einfach, Dokumente in der Vorschau anzuzeigen und zu öffnen UIDocumentInteractionController Klasse. Ich empfehle Ihnen, sowohl die Klassenreferenz als auch die UIDocumentInteractionControllerDelegate Protokoll. Es gibt viele weitere Delegatmethoden, die sich vor allem bei größeren Dokumenten oder komplexen Workflows als nützlich erweisen könnten.