美文网首页大神笔记-学习基础应用
iOS QLPreviewController 的使用

iOS QLPreviewController 的使用

作者: 开心的小娇 | 来源:发表于2018-12-25 15:17 被阅读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 系统导航栏

    相关文章

      网友评论

        本文标题:iOS QLPreviewController 的使用

        本文链接:https://www.haomeiwen.com/subject/raqflqtx.html