这篇文章是我的【iOS开发每日小笔记】系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧。它们可能会给用户体验、代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下。90%的作用是帮助自己回顾、记忆、复习。

 

大约两年多前,我曾尝试自己写一个程序,用来解析Word文档。当时满腔热血,认为只要是把xml各种标签一一对应解析就好了(当时还不知道有CoreText这档子东西)。后来发现自己实力不够,在解析了图片、文字、段落、音频、视频后,留了个烂尾项目。

任何事物都是需要坚持才能做好的,也许我当年一直理想地坚持做解析,现在说不定已经可以发布自己的"WPS"了。好了,还是不YY,开始记录今天的笔记。

今天遇到一个奇葩的问题,首先说明一下,我们现在打开各种格式的文档,都是使用UIDocumentInteractionController。采用“预览”的方式,比如html、txt、word、excel等。这些都是可以完美打开的。但是今天我却发现,UIDocumentInteractionController在某种情况下无法打开本地ibooks文档!

来看一下我的问题代码:

1         UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL:fileUrl];
2         controller.delegate = self;
3         [controller presentPreviewAnimated:YES];

用以上代码,可以直接present一个“预览”(preview)界面,对html、txt、word、excel都是良好支持的,但是ibooks却不支持!

如果想打开ibooks,只能通过以下方法:

1         UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL:fileUrl];
2         controller.delegate = self;
3         [controller presentOptionsMenuFromRect:rect inView:self.view animated:YES];

这样,首先弹出pop,这个pop里面会列出可能支持的第三方应用,其中包含了设备里安装的ibook app。点击它,才会跳转到ibook app中,自动加载本地fileUrl地址的ibooks文件。

 

导致这样效果的原因,我觉得是因为iOS中UIDocumentInteractionController的“预览”功能,不支持ibooks。而UIDocumentInteractionController只支持使用第三方app(也就是iOS自己的ibook app)来打开ibooks文档,因此只能使用“先pop,再选择打开”的方式来查看ibooks文档。这样做的劣势,就是必须离开自己的应用,跳转到ibooks中。