当前位置: 首页 > news >正文

iOS开发-QLPreviewController与UIDocumentInteractionController显示文档

iOS开发-QLPreviewController与UIDocumentInteractionController显示文档

在应用中,我们有时想预览文件, 可以使用QLPreviewController与UIDocumentInteractionController

一、QLPreviewController与UIDocumentInteractionController

QLPreviewController是一个 UIViewController ,用于管理预览项的用户体验。

UIDocumentInteractionController

官方文档:UIDocumentInteractionController 一种视图控制器,用于预览、打开或打印应用程序无法直接处理的文件格式的文件。名字叫控制器,但却是继承自 NSObject。

二、实现预览显示文档

使用QLPreviewController与UIDocumentInteractionController预览显示文档


#import "INDocumentPreviewViewController.h"
#import <QuickLook/QuickLook.h>@interface INDocumentPreviewViewController ()<QLPreviewControllerDataSource, UIDocumentInteractionControllerDelegate>@property (strong, nonatomic) QLPreviewController *previewController;
@property (copy, nonatomic) NSURL *fileURL; //文件路径
@property(nonatomic,strong) UIDocumentInteractionController * documentVC;@end@implementation INDocumentPreviewViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.view.backgroundColor = [UIColor whiteColor];UIButton *shareBtn;shareBtn = [UIButton buttonWithType:UIButtonTypeCustom];shareBtn.frame = CGRectMake(50, 100, 200, 46);shareBtn.layer.cornerRadius = 4;shareBtn.backgroundColor = [UIColor brownColor];[shareBtn setTitle:@"QLPreviewController" forState:UIControlStateNormal];[shareBtn addTarget:self action:@selector(showQLPreview) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:shareBtn];UIButton *shareBtn2;shareBtn2 = [UIButton buttonWithType:UIButtonTypeCustom];shareBtn2.frame = CGRectMake(50, 200, 200, 46);shareBtn2.layer.cornerRadius = 4;shareBtn2.backgroundColor = [UIColor brownColor];[shareBtn2 setTitle:@"UIDocumentInteraction" forState:UIControlStateNormal];[shareBtn2 addTarget:self action:@selector(documentInteraction) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:shareBtn2];self.previewController  =  [[QLPreviewController alloc]  init];self.previewController.dataSource  = self;
}- (void)showQLPreview {self.fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"七牛实时音视频云白皮书.pdf" ofType:nil]];[self presentViewController:self.previewController animated:YES completion:nil];//刷新界面,如果不刷新的话,不重新走一遍代理方法,返回的url还是上一次的url[self.previewController refreshCurrentPreviewItem];
}- (void)documentInteraction {self.fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"七牛实时音视频云白皮书.pdf" ofType:nil]];NSURL *url = self.fileURL;self.documentVC = [UIDocumentInteractionController interactionControllerWithURL:url];self.documentVC.delegate = self;dispatch_async(dispatch_get_main_queue(), ^{BOOL b = [self.documentVC presentPreviewAnimated:YES];});
}#pragma mark - QLPreviewControllerDataSource
-(id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {return self.fileURL;
}- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController{return 1;
}#pragma mark 代理方法
//为快速预览指定控制器
- (UIViewController*)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController*)controller
{NSLog(@"%@",NSStringFromSelector(_cmd));return self;
}//为快速预览指定View
- (UIView*)documentInteractionControllerViewForPreview:(UIDocumentInteractionController*)controller
{NSLog(@"%@",NSStringFromSelector(_cmd));return self.view;
}//为快速预览指定显示范围
- (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController*)controller
{NSLog(@"%@",NSStringFromSelector(_cmd));//    return self.view.frame;return CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}@end

三、小结

iOS开发-QLPreviewController与UIDocumentInteractionController显示文档。

学习记录,每天不停进步。

http://www.lryc.cn/news/101836.html

相关文章:

  • 八、用 ChatGPT 帮助排查生产事故
  • WPF实战学习笔记25-首页汇总
  • FreeRTOS源码分析-7 消息队列
  • 机器学习深度学习——权重衰减
  • 【Linux】线程互斥 -- 互斥锁 | 死锁 | 线程安全
  • 【vue-pdf】PDF文件预览插件
  • Flink集群运行模式--Standalone运行模式
  • Spring整合JUnit实现单元测试
  • Spring Boot学习路线1
  • 管理类联考——写作——论说文——实战篇——标题篇
  • idea中设置maven本地仓库和自动下载依赖jar包
  • 前缀和差分
  • Golang GORM 模型定义
  • 微服务的各种边界在架构演进中的作用
  • 使用 docker-compose 一键部署多个 redis 实例
  • 14-测试分类
  • 打开域名跳转其他网站,官网被黑解决方案(Linux)
  • redis总结
  • 现代C++中的从头开始深度学习:激活函数
  • python怎么实现tcp和udp连接
  • java设计模式-观察者模式(jdk内置)
  • 秒级体验本地调试远程 k8s 中的服务
  • CV前沿方向:Visual Prompting 视觉提示工程下的范式
  • Redis五大基础类型解析
  • 在CSDN学Golang云原生(服务网格istio)
  • Golang 获取本地 IP 地址方法
  • 抖音seo短视频账号矩阵系统技术开发简述
  • 运维高级--shell脚本完成分库分表
  • Mysql 忘记密码怎么重置密码(详细步骤)
  • 机器学习深度学习——图像分类数据集