大神笔记-学习基础应用

iOS QLPreviewController 的使用

2018-12-25  本文已影响0人  开心的小娇

QLPreviewController是OC语言的一个用于预览文档和分享文档的类,是一个继承自UIViewController的控制器类。

他和UIDocumentInteractionController的异同:

1.UIDocumentInteractionController是继承自NSObject的类,QLPreviewController继承自UIViewController

2.UIDocumentInteractionController的导航栏是固定的,而由于QLPreviewController是一个真正的控制器类,所以QLPreviewController可以自定义导航栏

3.他们都可以预览文件并进行分享,但是QLPreviewController最终调用的分享好像还是UIDocumentInteractionController(这只是我看到效果之后的猜测)

一、主要作用:

1.预览类似pdf、doc、ppt等类型文件的类。支持的格式有

\bullet iWork文档

\bullet 微软Office97以上版本的文档

\bullet RTF文档

\bullet PDF文件

\bullet 图片文件

\bullet 文本文件和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 系统导航栏

上一篇 下一篇

猜你喜欢

热点阅读