终于可以将我这几天的努力写在亲爱的博客上了。将前后研究的一起总结一下,现在可以使用三种方式进行预览控制,第一种与第二种都是使用QLPreviewController,第二种是用UIDocumentInteractionControllerDelegate,都属于QuickLook框架。具体详细说吧:
利用QLPreviewControllerDataSource进行文件预览。
QLPreviewController *previewer = [[QLPreviewController alloc] init];
[previewer setDataSource:self];
[previewer setCurrentPreviewItemIndex:indexPath.row];
[[self navigationController] pushViewController:previewer animated:YES];
{return [self.documentFilenames count];}
{ 。。。。
[self.previewer setTitle:@"tt"];
self.previewer.navigationItem.title=@"tt";
#import <QuickLook/QuickLook.h>
@interface BZPreviewDataSource : NSObject<QLPreviewControllerDataSource>
@property (nonatomic, retain) NSString *path;
@end
@implementation BZPreviewDataSource
@synthesize path = _path;
- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
{ return 1;}
- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{ return [NSURL fileURLWithPath:_path];}
@end
self.previewoCntroller = [[QLPreviewController alloc] init];
BZPreviewDataSource *dataSource = [[BZPreviewDataSource alloc]init];
dataSource.path = [[NSString alloc] initWithString:KnowledgeFullPath];
self.previewoCntroller.dataSource = dataSource;
[self.previewoCntroller setDelegate:self];
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 5.0){
//此函数是5.0之后的函数。
[self presentViewController:self.previewoCntroller animated:YES completion:nil];}
}
UIDocumentInteractionControllerDelegate。
代码非常简单,而且可控,唯一缺点是,利用缺省参数一次只能预览一个。
UIDocumentInteractionController在iOS 3.2中就已经存在了,使用起来非常灵活,功能也比较强大。它除了支持同设备上app之间的文档分享外,还可以实现文档的预览、打印、发邮件以及复制。
UIDocumentInteractionController的使用非常简单。首先通过调用它唯一的类方法interactionControllerWithURL:,并传入一个URL(NSURL),来初始化一个实例对象。之后设置一下这个view controller的delegate属性,并实现一些恰当的delegate方法。
注意,UIDocumentInteractionController并不是UIViewController的子类,所以必须通知document interaction controller使用哪个view controller来预览文档。
// Configure Document Interaction Controller
[self.documentInteractionController setDelegate:self];
self.documentInteractionController.name=@"test";//这里就可以自定义控制栏上的标题了
// Preview PDF
[self.documentInteractionController presentPreviewAnimated:YES];
{return [self.documentFilenames count];}
使用 Quick Look 框架
Quick Look 框架提供了增强的预览功能。该框架主要提供了 QLPreviewController
类。该类依赖于委托对象响应预览动作,以及一个用于提供预览文件的数据源。
从 iOS 4.2 开始,QuickLook preview controller 提供了包含了一个 action 按钮(即打印按钮)的预览视图。对于 controller 能预览的文件,action按钮能够打印该文档。从而不需要你编写任何打印代码。
通过以下方式显示一个Quick Look preview controller:
· 通过导航控制器,将预览窗口以“push 方式”显示。
· 通过 UIViewController 的 presentModalViewController:animated:方法以模态窗口的方式显示。
· 显示一个document interaction controller(如 “预览及打开文件” 中所述)。用户可以从document interaction controller 的选项菜单中选择“Quick Look”,即可打开一个 QuickLook preview controller。
显示 Quick Lookpreview controller 时,请选择适合于你的应用程序的外观和导航方式。如果你的程序未使用导航条,使用一个全屏的模态的 Quick Lookpreview controller 是合适的。如果你的程序使用了“iPhone 式”的导航,则采用 push 方式呈现预览窗口是合适的。
预览窗口中会包括一个标题,显示文件 URL 的最后一段路径。如果要重载标题,可以定制PreviewItem 类,并实现QLPreviewItem 协议中的 previewItemTitle方法。
Quick Look previewcontroller 能够预览下列文件:
· iWork 文档
· Microsoft Office 文档(Office ‘97 以后版本)
· Rich Text Format (RTF) 文档
· PDF 文档
· 图片
· 文本文件,其 uniform type identifier (UTI) 在 public.text
文件中定义 (查看UniformType Identifiers 参考)
· Comma-separated value (csv) 文件
使用 QuickLook preview controller,必须指定数据源对象(即实现 QLPreviewControllerDataSource 协议,请查看QLPreviewControllerDataSource协议参考)。数据源为 Quick Look preview controller 提供预览对象(preivew item),及指明它们的数量以便在一个预览导航列表中包含它们。在这个列表中包含多个对象,在模态预览窗口(全屏显示)显示了导航箭头,以便用户在多个预览对象间切换。对于用导航控制器“push方式”显示的QuickLook preview controller,你可以在导航条上提供按钮以便在预览对象列表见切换。