先来描述一下我遇到的问题,前段时间公司换了电子合同,把原来的文本合同改成了PDF。一开始以为ios只需要改一下Url地址就可以了,然后还是用UIWebView加载一下就可以,万万没想到h5给的url加载不出来,Url用手机和Mac的Safari都能打开而且带签章,心想什么鬼啊~~之前也遇到过加载通过h5处理后的PDF的Url打不开,解决办法是直接用UIWebView直接加载PDF的文件路径。这次加载不了我也直接问后台要了PDF的文件路径然后放在UIWebView加载,问题不大,直接就加载出来了。但是!wtf!电子签章没有显示出来。后来又尝试直接接受字节流加载也是显示不出来,然后一番Google~原来问题可以用QLPreviewController加载出来!!废话不多说,直接上代码,超级简单。
QLPreviewControllerDataSource,QLPreviewControllerDelegate 导入两个协议
@property (strong, nonatomic)QLPreviewController *previewController;
@property (copy, nonatomic)NSURL *fileURL;
//1.创建
_previewController = [[QLPreviewController alloc] init];
//2.设置代理
_previewController.dataSource = self;
_previewController.delegate = self;
[self presentViewController:self.previewController animated:YES completion:nil];
//刷新界面,如果不刷新的话,不重新走一遍代理方法,返回的url还是上一次的url
[self.previewController refreshCurrentPreviewItem];
//2.实现代理QLPreviewControllerDelegate
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller{
//返回当前预览文件的个数 return 1;
}
- (id)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{
// NSURL *url = [NSURL fileURLWithPath:@"https://www.tutorialspoint.com/ios/ios_tutorial.pdf"];
//返回每一个要预览的文件的地址 return url;
return self.fileURL;
}