Le sandboxing sur iOS rend la plate-forme beaucoup plus sécurisée, ce qui profite en définitive à tous les utilisateurs de la plate-forme. Cependant, en raison des règles strictes inhérentes au sandboxing, le partage de données entre applications n'est pas trivial. Une classe souvent négligée qui facilite le partage de documents entre applications est la UIDocumentInteractionController
classe. Dans cette astuce, je vais vous montrer comment utiliser cette classe pour prévisualiser des documents et pour ouvrir des documents dans d'autres applications installées sur le périphérique..
Je dois avouer que j'ai été un peu surpris de découvrir que UIDocumentInteractionController
est avec nous depuis iOS 3.2. le UIDocumentInteractionController
class est souple dans son utilisation et plus puissant que la plupart d’entre nous ne le réalisons. Non seulement il permet aux développeurs d'ouvrir des documents dans d'autres applications installées sur le périphérique, mais il prend également en charge la prévisualisation, l'impression, l'envoi par courrier électronique et la copie de documents..
En utilisant le UIDocumentInteractionController
la classe est simple. La première étape consiste à initialiser une instance de la classe en appelant sa seule méthode de classe., interactionControllerWithURL:
, et en passant l'URL (NSURL
) du document avec lequel vous avez l’intention de travailler. Après avoir défini la propriété délégué du contrôleur d'interaction de document, vous implémentez les méthodes de délégation appropriées..
Gardez à l'esprit que le UIDocumentInteractionController
n'est pas une sous-classe de UIViewController
. En d'autres termes, même si la prévisualisation d'un document est médiée par le UIDocumentInteractionController
, vous devez indiquer au contrôleur d'interaction de document quel contrôleur de vue utiliser pour prévisualiser le document. Ce que cela signifie exactement deviendra clair lorsque nous générerons l'exemple d'application. Dans l'exemple d'application, je vais vous montrer comment (1) prévisualiser un document et (2) ouvrir un document dans une autre application qui prend en charge le type de fichier du document..
Comme je l'ai mentionné il y a un instant, notre exemple d'application permettra aux utilisateurs de prévisualiser un document et de l'ouvrir dans une autre application installée sur le périphérique. Ce dernier est souvent très utile si vous souhaitez donner à vos utilisateurs plus de flexibilité quant à ce qu’ils peuvent faire avec les données stockées dans votre application. Un exemple courant est l’ouverture d’une photo dans une application de retouche photo, telle que iPhoto..
Créez un nouveau projet dans Xcode en sélectionnant le Application à vue unique modèle de la liste des modèles (figure 1). Nommez votre application Les documents, entrez un identifiant d'entreprise, définissez iPhone pour la famille d'appareils, et vérifiez Utiliser le comptage automatique des références. Le reste des cases à cocher peut ne pas être coché pour ce projet (figure 2). Indiquez à Xcode où vous souhaitez enregistrer le projet et appuyez sur le bouton Créer bouton.
L’interface utilisateur de notre application contiendra deux boutons, l’un pour l’aperçu d’un document PDF et l’autre pour l’ouverture d’un document PDF dans une autre application. Avant de créer l'interface utilisateur, créez une action pour chaque bouton dans le fichier d'implémentation du contrôleur de vue, comme indiqué ci-dessous..
- (IBAction) previewDocument: (id) expéditeur
- (IBAction) openDocument: (id) expéditeur
Sélectionner MTViewController.xib et faites glisser deux UIButton
cas de la Bibliothèque d'objets à droite dans la vue du contrôleur (figure 3). Sélectionnez le Propriétaire du fichier objet à gauche, ouvrez le Inspecteur de connexions, et reliez les actions que nous avons créées il y a un instant aux boutons (figure 4). C’est tout ce que nous devons faire dans Interface Builder..
Le document sur lequel nous allons travailler est un document PDF. Vous pouvez utiliser n’importe quel document PDF, mais j’ai inclus un exemple de document PDF avec les fichiers source de cette astuce. Il s’agit du Guide de programmation iOS d’Apple, que vous pouvez également trouver en ligne. Faites glisser le document dans votre projet et assurez-vous de cocher la case intitulée Copier des éléments dans le dossier du groupe de destination (si nécessaire) lorsque vous y êtes invité (figure 5). Assurez-vous également que le document est ajouté à la liste. Les documents cible (figure 5).
Lorsque vous utilisez le UIDocumentInteractionController
classe, il est important de garder à l’esprit deux choses: (1) vous devez faire référence au contrôleur d’interaction de document et (2) le UIDocumentInteractionControllerDelegate
protocole doit être mis en œuvre. Commencez par mettre à jour le fichier d’en-tête du contrôleur de vue comme indiqué ci-dessous pour informer le compilateur que le MTViewController
classe conforme à la UIDocumentInteractionControllerDelegate
protocole.
#importation@interface MTViewController: UIViewController @fin
Dans le fichier d'implémentation du contrôleur de vue, ajoutez une propriété privée de type UIDocumentInteractionController
et nommez-le documentInteractionController
. Cette propriété stockera la référence au contrôleur d’interaction de document que nous utiliserons..
Regardons maintenant la mise en œuvre de la previewDocument:
action. Nous commençons par obtenir l'URL (NSURL
) du document. Le document faisant partie du lot d’applications, il est très facile d’obtenir l’URL du document grâce à une méthode pratique du NSBundle
classe (voir ci-dessous).
- (IBAction) previewDocument: (id) expéditeur NSURL * URL = [[NSBundle mainBundle] URLForResource: @ "sample" withExtension: @ "pdf"]; if (URL) // Initialisation de Document Interaction Controller self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL: URL]; // Configure Document Interaction Controller [self.documentInteractionController setDelegate: self]; // Aperçu PDF [self.documentInteractionController presentPreviewAnimated: YES];
Si une URL valide nous est retournée, nous initialisons une instance du UIDocumentInteractionController
class et passez l'URL du document. Nous stockons une référence au contrôleur d’interaction de document dans le documentInteractionController
propriété que nous avons créée il y a une minute. Notre contrôleur de vue servira de délégué du contrôleur d'interaction de documents. Présenter un aperçu du document PDF est aussi simple que d'appeler presentPreviewAnimated:
sur le contrôleur d'interaction de document.
Si vous deviez créer et exécuter l'application maintenant, vous remarquerez que rien ne se produit lorsque le bouton intitulé Aperçu est exploité. Il y a une méthode de délégué que nous devons d'abord mettre en œuvre. Il y a quelques minutes, je vous ai dit qu'il est important de réaliser que le UIDocumentInteractionController
classe est une sous-classe de NSObject
, ne pas UIViewController
. Même s'il se charge d'afficher le document, nous devons indiquer au contrôleur d'interaction de document quel contrôleur de vue utiliser pour afficher un aperçu du document. Une des méthodes de délégation du UIDocumentInteractionControllerDelegate
Le protocole demande au délégué un contrôleur de vue qu'il peut utiliser pour prévisualiser le document. Cette méthode de délégué porte le nom approprié documentInteractionControllerViewControllerForPreview:
. Comme nous voulons afficher l'aperçu dans notre contrôleur de vue principal, nous pouvons simplement renvoyer soi
comme indiqué dans la mise en œuvre ci-dessous. Cela signifie que le contrôleur d'interaction de document utilisera notre contrôleur de vue pour prévisualiser le document PDF. Il présentera une vue modale dans laquelle il présente le document.
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller return self;
Bien sûr, vous pouvez modifier la mise en œuvre de documentInteractionControllerViewControllerForPreview:
pour répondre à vos besoins. Avec la méthode déléguée mise en œuvre, il est temps de créer et d'exécuter notre application pour la première fois et de l'essayer (figure 6). Notez que vous pouvez même partager le document échantillon par courrier électronique, l'imprimer ou le copier dans le Presse-papiers. En outre, il est possible d'ouvrir le document dans toute autre application prenant en charge le type de fichier du document. Appuyez sur le bouton en haut à droite pour voir ce que je veux dire (figure 7).
Dans de nombreuses situations, cependant, il est plus approprié d'autoriser les utilisateurs à ouvrir un document dans une autre application sans afficher au préalable un aperçu du document. Pour rendre cela possible dans notre exemple d’application, nous devons implémenter la openDocument:
action. Comme dans le previewDocument:
action, nous obtenons l'URL du document PDF exemple dans le bundle d'application et l'utilisons pour initialiser une instance du fichier. UIDocumentInteractionController
classe. Après avoir défini le délégué du contrôleur d’interaction de document, nous présentons un menu en appelant presentOpenInMenuFromRect: inView:
sur le contrôleur d'interaction de document. le CGRect
que nous passons comme premier argument est le cadre du bouton comme vous pouvez le voir dans l'extrait de code ci-dessous.
- (IBAction) openDocument: expéditeur (id) bouton UIButton * = expéditeur (UIButton *); NSURL * URL = [[NSBundle mainBundle] URLForResource: @ "sample" withExtension: @ "pdf"]; if (URL) // Initialisation de Document Interaction Controller self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL: URL]; // Configure Document Interaction Controller [self.documentInteractionController setDelegate: self]; // Présenter Ouvrir dans le menu [self.documentInteractionController presentOpenInMenuFromRect: [frame du bouton] inView: self.view animated: YES];
Pour tester le openDocument:
action, il est important d’exécuter l’exemple d’application sur un périphérique physique. La raison est simple. Le système d'exploitation vérifie quelles applications sur le périphérique prennent en charge le type de fichier (UTI) que nous voulons ouvrir. S'il ne trouve aucune application prenant en charge le type de fichier correspondant, il n'affichera pas de message. Ouvrir dans menu et c'est ce qui se passera dans le simulateur iOS.
Pour tester cette fonctionnalité, assurez-vous qu'une application installée sur votre périphérique physique accepte les documents PDF, tels que Dropbox ou l'application Kindle d'Amazon..
Comme vous pouvez le constater, il est très facile de prévisualiser et d’ouvrir des documents à l’aide du UIDocumentInteractionController
classe. Je vous recommande d’explorer sa référence de classe ainsi que la UIDocumentInteractionControllerDelegate
protocole. De nombreuses autres méthodes de délégation pourraient s'avérer utiles, en particulier lorsque vous travaillez avec des documents plus volumineux ou des flux de travail complexes..