QLPreviewController是OC语言的一个用于预览文档和分享文档的类,是一个继承自UIViewController的控制器类。
他和UIDocumentInteractionController的异同:
1.UIDocumentInteractionController是继承自NSObject的类,QLPreviewController继承自UIViewController
2.UIDocumentInteractionController的导航栏是固定的,而由于QLPreviewController是一个真正的控制器类,所以QLPreviewController可以自定义导航栏
3.他们都可以预览文件并进行分享,但是QLPreviewController最终调用的分享好像还是UIDocumentInteractionController(这只是我看到效果之后的猜测)
一、主要作用:
1.预览类似pdf、doc、ppt等类型文件的类。支持的格式有
iWork文档
微软Office97以上版本的文档
RTF文档
PDF文件
图片文件
文本文件和CSV文件
二、使用方法
1、使用的时候首先要引用#import。
#import <QuickLook/QuickLook.h>
2、遵循QLPreviewControllerDataSource,QLPreviewControllerDelegate,类似于UITableView代理和数据源的实现
@interface OpenFileViewController ()<QLPreviewControllerDataSource,QLPreviewControllerDelegate>
3、分为两种调用方式实现文件预览(只对重要属性做了标记)
1、自定义导航栏,如图1
1.通过判断获取QLPreviewController是否可以打开该文档
if ([QLPreviewController canPreviewItem:(id<QLPreviewItem>)[NSURL fileURLWithPath:path]]) {
2.创建QLPreviewController对象
QLPreviewController *previewController1 = [[QLPreviewController alloc] init];
3.设置QLPreviewController对象的frame
previewController1.view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
4.QLPreviewController数据源
previewController1.dataSource=self;
5.QLPreviewController代理
previewController1.delegate=self;
6.QLPreviewController当前显示第几个文档
previewController1.currentPreviewItemIndex=0;
previewController1.view.backgroundColor = [UIColor orangeColor];
previewController1.navigationController.navigationBar.userInteractionEnabled = NO;
previewController1.view.userInteractionEnabled=NO;
[selfaddChildViewController:previewController1];
[self.viewaddSubview:previewController1.view];
}else{
NSLog(@"无法打开该文件");
}
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:(UIBarButtonItemStyleDone) target:self action:@selector(closeAction)];
2.使用系统导航栏,分享按钮确定并且有标题,可以自定义返回按钮,如图2
1.通过判断获取QLPreviewController是否可以打开该文档
if ([QLPreviewController canPreviewItem:(id<QLPreviewItem>)[NSURL fileURLWithPath:path]]){
2.创建QLPreviewController对象
QLPreviewController *previewController1 = [[QLPreviewController alloc] init];
3.设置QLPreviewController对象的frame
previewController1.view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
4.QLPreviewController数据源
previewController1.dataSource=self;
5.QLPreviewController代理
previewController1.delegate=self;
6.QLPreviewController当前显示第几个文档
previewController1.currentPreviewItemIndex=0;
previewController1.view.backgroundColor = [UIColor orangeColor];
previewController1.navigationController.navigationBar.userInteractionEnabled = NO;
previewController1.view.userInteractionEnabled=NO;
// 自定义导航栏
UINavigationController* navigationController = [[UINavigationController alloc]initWithRootViewController:previewController1] ;
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(close)];
previewController1.navigationItem.leftBarButtonItem= backButton;
[self presentViewController:navigationController animated:YES completion:nil];
}else{
NSLog(@"无法打开该文件");
}
4、代理和数据源实现
-(CGRect)previewController:(QLPreviewController*)controller frameForPreviewItem:(id)item inSourceView:(UIView*__autoreleasing*)view{
returnCGRectMake(60,200,200,200);
}
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController*)previewController{
// 我返回的PreviewItems的数量为1,就是一次加载一个文件,多个文档就返回您文档数组的个数
return 1;
}
- (id)previewController:(QLPreviewController*)previewController previewItemAtIndex:(NSInteger)idx{
return @"你文件的路径";
}
由于代码过于简单,所以不提供代码下载,有需要的可以直接把相关代码拷贝到工程里。
如果想把文档分享给其他App,可以参考另一篇关于UIDocumentInteractionController的文档。
UIDocumentInteractionController的使用
以上是我使用UIDocumentInteractionController的心得,如有不足请多指教,谢谢!
图1 自定义导航栏
图2 系统导航栏