(浏览文档)UIDocumentInteractionController打开自己的第三方应用、使用QLPreviewController浏览文档

UIDocumentInteractionController:

在.h文件中添加<<span style="line-height: 21px;">UIDocumentInteractionControllerDelegate>

然后在.m文件中,新建一个方法,用来响应你点击按钮弹出时弹出的popview,其中会罗列可打开当前文件的其他应用。

方法如下:

-(void)openDocumentIn{

documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:unEncodingURL]];

documentController.delegate = self;

documentController.UTI = @"com.microsoft.word.doc";

[documentController presentOpenInMenuFromRect:CGRectMake(760, 20, 100, 100)
inView:self.view animated:YES];

}

其中的 documentController.UTI 表示那些类型的文件支持第三方软件打开,此链接里面有各种类型文件对应的数https://developer.apple.com/library/mac/#documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html 可用根据unEncodingURl中的文件后缀名去动态设置这个值rect 根据自己的需求写

然后delegate里面的方法

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)interactionController

{

return self;

}

QLPreviewController:

iOS SDK包括了QLPreviewControllerAPI,组件允许用户浏览许多不同的文件类型,如XLS文件,Word文档文件,PDF文件。约翰已创建了一个示例应用程序演示使用QLPreviewController。在示范中,您可以查看几个不同的文件类型,甚至打印(使用无线打印机。)随着一个简短的教程,我们解释实施QLPreviewController的基础步骤,你可以找到约翰的例子::::对于过去的几个月中,我一直花一些时间检查出IOS快看文件预览 -接下来是一个短的应用程序,我写着是为了更熟悉QLPreviewControllerAPI。对于那些不熟悉的读者可以这么看,quick
look是一个框架,它提供快速预览的一系列文件类型 -支持的文件包括iWork文档,微软Office,RTF格式,PDF格式,图像,文本文件,并以逗号分隔(CSV)文件。接下来在演示的程序中,我用了三个不同文件类型,.xls/image/ms
office /pdf

为应用程序的接口文件如下所示,注意QL数据源的引用,使用的QLPreviewController时,你必须实现此协议QLPreviewControllerDataSource。这里的唯一的实例变量是一个数组,包涵每个被预览文件的文件字符串值。UITableViewController类将用于显示预览的文件列表,通过navigation到下一个预览界面。

[cpp] view plaincopy

  1. #import
  2. @interface TestViewController : UITableViewController ource>
  3. {
  4. NSArray *arrayOfDocuments;
  5. }
  6. @end

在本节中,我将展示一个选择适用于设立预览代码。创建表视图和填充相同的代码可以被视为在Xcode项目,你可以从下面的链接下载(如果要学习tableview的使用,可以参考其它的指南)。

初始化代码填入文件名的数组: 这样文件名全在数组了:

[cpp] view plaincopy

  1. -(id)init
  2. {
  3. if (self = [super init])
  4. {
  5. arrayOfDocuments = [[NSArray alloc] initWithObjects:
  6. @"iOSDevTips.png", @"Remodel.xls", @"Core J2ME Technology.pdf", nil];
  7. }
  8. return self;
  9. }

下面的方法是采用QLPreviewControllerDataSource协议时,必要的两个之一,此方法通知??预览控制器,如何在预览导航列表中的呈现多少个项目是:

[cpp] view plaincopy

  1. - (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
  2. {
  3. return [arrayOfDocuments count];
  4. }

这种呢,算是question type的events,就是问 文件从什么地方来,NSURL

[cpp] view plaincopy

  1. - (id )previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
  2. {
  3. // Break the path into its components (filename and extension)
  4. NSArray *fileComponents = [[arrayOfDocuments objectAtIndex: index] componentsSeparatedByString:@"."];
  5. // Use the filename (index 0) and the extension (index 1) to get path
  6. NSString *path = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]];
  7. //这个代码就体现了灵活性,你也可以写成 ofType .pdf
  8. return [NSURL fileURLWithPath:path];
  9. }

项目中的其余代码是典型的iPhone/的iOS的东西,创建应用程序委托,委托的UIWindow中添加一个子视图(导航控制器),使窗口可见。我从下面的委托代码,在这里你可以得到更大的图片视图我如何设置此应用程序的视图控制器。

[cpp] view plaincopy

  1. - (void)applicationDidFinishLaunching:(UIApplication *)application
  2. {
  3. // Create and initialize the window
  4. window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  5. // Create test view controller
  6. vc = [[TestViewController alloc] init];
  7. // Create navigation controller
  8. nav = [[UINavigationController alloc] initWithRootViewController:vc];
  9. [window addSubview:[nav view]];
  10. [window makeKeyAndVisible];
  11. }

在选中特定行的时候,初始化QLPreviewController

[cpp] view plaincopy

  1. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3. // When user taps a row, create the preview controller
  4. QLPreviewController *previewer = [[[QLPreviewController alloc] init] autorelease];
  5. // Set data source
  6. [previewer setDataSource:self];
  7. // Which item to preview
  8. [previewer setCurrentPreviewItemIndex:indexPath.row];
  9. // Push new viewcontroller, previewing the document
  10. [[self navigationController] pushViewController:previewer animated:YES];
  11. }

值得一提的是预览控制器工作时,你有两种不同的选择。首先,你可以推到使用一个UINavigationController对象,你可以看到预览控制器的对象是我做了什么。预览我的应用程序生命在TestViewController这个对象控制器设置为导航控制器的根视图控制器。

第二种方法来显示预览控制器是模态,使用方法presentModalViewController。  //这个和我上篇fastpdfkit的讲法是一致的:

[cpp] view plaincopy

  1. #pragma mark -
  2. #pragma mark QLPreviewControllerDataSource
  3. // Returns the number of items that the preview controller should preview
  4. - (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController
  5. {
  6. return 5; //30//you can increase/decrease the this
  7. }
  8. // returns the item that the preview controller should preview
  9. - (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
  10. {
  11. return fileURL;
  12. }
  13. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  14. {
  15. // Return YES for supported orientations
  16. return (interfaceOrientation == UIInterfaceOrientationPortrait);
  17. }

以上就是QLPreviewController的一些delegate,首先是预览页面数目,其次是我需要的URL(NSURL),最后是这个view的支持rotation程度

时间: 2024-07-29 17:23:11

(浏览文档)UIDocumentInteractionController打开自己的第三方应用、使用QLPreviewController浏览文档的相关文章

【iOS开发每日小笔记(十三)】使用UIDocumentInteractionController 打开ibooks文档的注意点

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 大约两年多前,我曾尝试自己写一个程序,用来解析Word文档.当时满腔热血,认为只要是把xml各种标签一一对应解析就好了(当时还不知道有CoreText这档子东西).后来发现自己实力不够,在解析了图片.文字.

如何实现SP文档库类似百度文档库的效果 (副标题:如何在SP2013文档库的SWF文件用FlexPager显示)

如何实现SP文档库类似百度文档库的效果 (副标题:如何在SP2013文档库的SWF文件用FlexPager显示) 1. 编辑文档库列表显示页面,如下图: 2. 添加内容编辑器,如下图: 3. 添加如下在[内容编辑器中]-[编辑源],添加如下JS代码,如下图: ?  代码如下: <scrip type="text/javascript" src="/SiteAssets/jquery-1.4.1.js"></script> <script

JavaScript之DOM-4 文档结构和遍历(节点树、元素树、文档的遍历)

一.节点树 节点树 概念 - HTML DOM 将 HTML 文档视作树结构 - 文档中的元素.属性.文本.注释等都被看作一个节点 - 这种结构被称为节点树: 上下层节点 - 节点树中的节点彼此拥有层级关系,DOM 使用如下属性遍历整棵节点树: 平行的节点 - 节点树中使用如下方法访问平行的兄弟节点: 二.元素树 元素树 概念 - 元素树是节点树的一个子集,只包含其中的元素节点 上下层元素 - 与节点树一样,元素树上的元素节点也有父子关系,使用如下属性可以获取这些关系: 平行的元素 - 元素树使

C# 复制一个Word文档的部分或全部内容到另一个Word文档

C# 复制一个Word文档的部分或全部内容到另一个Word文档 我最近喜欢折腾Office软件相关的东西,想把很多Office软件提供的功能用.NET来实现,如果后期能把它用来开发一点我自己的小应用程序那就更好了. 扯远了,回到正题.复制文档内容这个功能太常见啦,在微软Word中实现这个功能很简单,只需要复制和粘贴就行了.这篇文章的主要目的是记录如何用C#来实现复制一个Word文档的部分或全部内容到另一个word文档,废话不多说,下面开始. 第一部分:复制部分内容: 在我的这个示例中,复制部分内

自媒体爆文怎么写?掌握这4种技巧轻松出爆文!

自媒体爆文怎么写?相信这是每天自媒体人每天都在思考的问题!但是能写出一篇好的爆文的却并不多.那么就会有人问,我们应该如何操作或者使用什么样的方法技巧才能够写出一篇好的自媒体爆文呢?今天易撰自媒体工具小编就跟分享4种实用技巧. (一)标题的修炼(17种):要想写出好的自媒体爆文,文章有一个好的标题是关键,标题也是作者和用户之间的重要纽带,取标题的核心技巧:新.奇.特.在选择一个好标题的时候,不用提过注重文章的形式拘束,注重要考虑文章传递的核心价值.以此来吸引用户来阅读文章.给大家介绍爆文标题的17

修复PDF文档无法打开

修复使用软件PDF Recovery Toolbox,下载地址以及注册码 链接:http://pan.baidu.com/s/1o80TvN8 密码:w9g1 修复后只能保存为adober reader 8.0或者7.0. (1)用其他pdf阅读器打开修复后文档,可以显示全部文档内容. (2)用adober reader 11.0可以打开,只显示第一页,其他页空白,但可以修复所有的注释(没有尝试用adober reader 8.0或者7.0打开). 有原文档备份的情况下,在原文档中加入修复后文件

Android开发帮助文档Doc打开速度慢解决_Python篇

解决android帮助文档打开慢 网友说是因为Doc目录下的html文件里含有访问google的js文件 <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto"> 和 <script src="http:/

JAVA实现Word文档形式打开查看的内容

我对这个功能的理解是:拿到你想要显示的信息,写入到一个临时文件当中去以便插件进行编辑.把临时文件的相对路径传到页面去.页面拿到这个要显示的文档的相对路径对文档进行编辑在Word文档里面显示出来 后台代码部分: @RequestMapping("check") public String check(String wid,Model model,HttpServletResponse response,HttpServletRequest request) throws IOExcept

使安卓本地sdk中的文档能够打开

Code 现在由于政府墙的原因,不能直接上安卓官网查看资料 下载sdk时,是通过更改hosts文件,下载下来后,里面会有个docs文件夹,这个也是安卓的官方文档. 但是由于里面需要引用谷歌的资源,所以打不开或者需要极长时间才能打开. 还有就是打开后,浏览器中有个东西会不停的再转啊转的加载东西.对有点强迫证的来说简直是个噩梦. 使用方法: 把下面的代码存成mvgoogle.py文件,放在docs 文件夹下.直接运行即可,使用的是python3.4. import html.parser impor