文档章节

iOS SDK:预览和打开文档

 子寒在秋
发布于 2014/07/15 19:17
字数 1552
阅读 21
收藏 0

http://mobile.tutsplus.com/tutorials/iphone/previewing-and-opening-documents-with-uidocumentinteractioncontroller/

iOS中的沙盒可以让平台更加的安全,这也是沙盒给用户带来的最主要好处。不过由于沙盒的严格限制,导致程序之间共享数据比较麻烦。一般在程序间共享文档可以通过UIDocumentInteractionController(该类经常被开发者忽略)。本文中,我将介绍如何使用这个类在其它程序(已经安装在设备中的程序)中预览和打开文档。
 
UIDocumentInteractionController
iOS 3.2中就已经存在了,使用起来非常灵活,功能也比较强大。它除了支持同设备上app之间的文档分享外,还可以实现文档的预览、打印、发邮件以及复制。
 
UIDocumentInteractionController
的使用非常简单。首先通过调用它唯一的类方法 interactionControllerWithURL:,并传入一个URL(NSURL),来初始化一个实例对象。之后设置一下这个view controllerdelegate属性,并实现一些恰当的delegate方法。
 
注意,UIDocumentInteractionController并不是UIViewController的子类,所以必须通知document interaction controller使用哪个view controller来预览文档。
 
Step 1: 设置项目
在同设备app之间打开文档非常有用,一个常见的实例是在图片编辑器中打开图片,比如iPhoto
 
 Xcode中创建一个新项目,选择“Single View Application”模板。命名文档,键入公司标识符,Device选择iPhone,设备下边选择“Use Automatic Reference Counting”,其他两项不选。然后点击“Next”,保存项目,点击“Creat”按钮。

 Step 2: 创建用户界面
这个程序的用户界面包括两个按钮,一个是用于在其他app中预览PDF文档,另一个是用户在其他app中打开PDF文档。创建用户界面之前,在viewcontroller执行文件中为每个按钮赋予一个动作,如下:
1.- (IBAction)previewDocument:(id)sender {
2.}
 
1.- (IBAction)openDocument:(id)sender {
2.}

 
选择MTViewController.xib,我们需要从右边view controller视图中拖拽两个UIButton实例。选择左边的File’s Owner objectobject,打开Connections Inspector,把先前创建的动作和按钮连接起来。

 

Step 3:预览文档
现在支持的是PDF文档,你可以使用任何PDF文档,但是在关于这个技巧的源文件中,我已经包含了一个PDF例子,就是苹果的iOS编程指南,也可以在线获得。把文档拖至你的项目中,选中“ Copy items into destination group’s folder (ifneeded)”这个复选框,最后确保文件已经添加至下边的“Documents target”中。

使用UIDocumentInteractionController类注意事项:1. 你需要保存着document interation controller的实例。2.需要实现UIDocumentInteractionControllerDelegate协议。
 
首先更新viewcontroller的头文件(如下所示)来告诉compilerMTViewController类遵照UIDocumentInteractionControllerDelegate协议。
1.#import <UIKit/UIKit.h>
2.@interface MTViewController : UIViewController<UIDocumentInteractionControllerDelegate>
3.@end

 
view controller的实现文件中,添加一个私有属性,类型为UIDocumentInteractionController,并将名称命名为documentInteractionController。这个属性存储着document interaction controller,之后会用着。
 
看看previewDocument:方法的实现,首先获得文档的URL (NSURL) ,由于文档是app的一部分,因此通过NSBundle类获得文档的(NSURL)非常容易,如下:
 
1.- (IBAction)previewDocument:(id)sender {
2.    NSURL *URL = [[NSBundle mainBundle] URLForResource:@"sample"withExtension:@"pdf"];
3.    if (URL) {
4.        // Initialize Document InteractionController
5.        self.documentInteractionController= [UIDocumentInteractionController 
interactionControllerWithURL:URL];
6.        // Configure Document InteractionController
7.        [self.documentInteractionControllersetDelegate:self];
8.        // Preview PDF
9.       [self.documentInteractionController presentPreviewAnimated:YES];
10.    }
11.}
 
如果返回了一个有效的URL,我们初始化一个UIDocumentInteractionController的实例,并且通过文档的URL。在documentInteractionController的属性中我们存储了一个document interaction controller的引用。view controller将会充当document interaction controllerdelegate
 
如果现在运行app,你会注意到点击预览按钮时,什么都没有发生。因为这里我们首先要实现一个delegate method
 
前边提到,UIDocumentInteractionController类并不是UIViewController的子类,而是继承自 NSObject 我们需要通知documentinteraction controller使用哪个view controller进行文档预览。
 
UIDocumentInteractionControllerDelegate
中有一个名documentInteractionControllerViewControllerForPreview:delegate方法,该方法请求获得一个用于显示(预览)文档的viewcontroller
 
我们希望在main viewcontroller中显示预览,所以可简单的返回self,如下代码所示。它的意思是document interfation controller将使用我们的view controller来预览PDF文档——modal view的方式显示文档。
 
1.- (UIViewController *)documentInteractionControllerViewControllerForPreview: 
(UIDocumentInteractionController *) controller {
2.    return self;
3.

 
当然你可以简化documentInteractionControllerViewControllerForPreview:的实现以满足你的需要。执行委托方法的同时,你可以首次运行app,试试看这个效果,你可以通过邮件分享这个文档,可以打印或者复制。另外,也可以在支持该文档类型的其app中打开文档,在图中点击右边的按钮,看看我说的什么意思。

Step 4: 打开文档
为了实现这一目的我们需要实现openDocument:方法。在openDocument:方法中,获取到在程序bundle中一个PDF文件的url,用这个url初始化一个UIDocumentInteractionController

 

之后设置一下UIDocumentInteractionController delegate,在这个UIDocumentInteractionController中调用presentOpenInMenuFromRect:inView:方法显示一个菜单。传入的第一个参数CGRectbuttonframe,如下所示:
1.- (IBAction)openDocument:(id)sender {
2.    UIButton *button = (UIButton *)sender;
3.    NSURL *URL = [[NSBundle mainBundle]URLForResource:@"sample" withExtension:@"pdf"];
4.    if (URL) {
5.        // Initialize Document InteractionController
6.        self.documentInteractionController= [UIDocumentInteractionController 
interactionControllerWithURL:URL];
7.        // Configure Document InteractionController
8.       [self.documentInteractionController setDelegate:self];
9.        // Present Open In Menu
10.        [self.documentInteractionControllerpresentOpenInMenuFromRect:[button frame] inView:self.view animated:YES];
11.    }
12.}

 
为了测试openDocument:方法,在真机上运行实例app非常重要。原因很简单,操作系统要检查安装的app是否支持我们要打开的文件类型(UTI)。如果没有找到支持相应文件类型的app,那么菜单中就不会有打开的提示,而这个不能通过iOS模拟器进行测试。
 
为了测试这个功能,首先要在真机上安装支持PDFapp,比如Dropbox或者AmazonKindle app

总结
使用UIDocumentInteractionController这个类可以简单地实现app之间文档的预览和打开。建议你去看看这个类的参考文档,特别是UIDocumentInteractionControllerDelegate协议——这里面有许多delegate


方法,当遇到大文档或者复杂的工作流时,这些方法都非常的方便。

源文件:

 

http://download.csdn.net/detail/ydj213/5405941


© 著作权归作者所有

粉丝 5
博文 106
码字总数 40808
作品 0
徐汇
私信 提问
iOS 7 开发:设置 Xcode 5 和 iOS 7 SDK

对新的iOS开发者,改变是好的 正如我之前的文章所提及的, iOS 7 代表的不止是苹果改变他们的移动设备的UI;它也代表了对延缓学习怎样开始建立原生iOS应用的开发者的一个机会. iOS 7 是最新的...

oschina
2013/06/19
11K
0
学习如何针对iOS 7进行开发?

  iOS 7已经发布了六个测试版,除了beta 6进行了小幅修正外,其他几个测试版都有不小的改动。昨天有消息说苹果将在9月10日发布iOS 7正式版,那么GM版很快将会与开发者见面。在iOS 7来临前夕...

fangzhou99
2013/09/17
418
0
如何在CocoaPods中添加自定义的库

CocoaPods命令介绍 在 上一篇文章 中,已经介绍过CocoaPods的几条基本命令。 pod setup 用于初始化本地第三方库的Spec描述文件,所有的spec文件存都存放在 ~/.cocoapods 目录中。 pod instal...

泊竹
2013/12/09
2.8K
0
Windows 开源 iOS 到 Windows 的移植技术

Windows 开源了 Windows 到 iOS 的桥接技术 WinObjC,可以移植 iOS 应用到 Windows 上,当前还是技术预览阶段。 Windows Bridge for iOS (WinObjC) 为 Visual Studio/Windows 提供一个 Obje...

oschina
2015/08/07
7.6K
48
iOS APP与APP之间的通信方式

1、URL Scheme 这个最常见了,基本接入分享、支付、地图的,都会用到 2、UIPasteboard 其实就是粘贴板,常见的就是淘口令啥的,也挺常见的 3、Keychain 这个就是一个安全的存储容器,本质其实...

RainOrz
02/26
42
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
14
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
5
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.3K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部