以前的項(xiàng)目中有要求預(yù)覽PDF文件,有本地的和網(wǎng)絡(luò)的,所以就學(xué)習(xí)了下。打開(kāi)PDF word excel PPT的文件一般有兩種方式,QuickLook框架和UIDocumentInteractionController類,這篇文章主要介紹著兩種打開(kāi)方式,以及本地打開(kāi)和網(wǎng)絡(luò)打開(kāi)兩種方式。堵上demo下載鏈接:https://github.com/ZhengYaWei1992/ZWOpenFileDemo
先看一下UIDocumentInteractionController的使用。
self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:URL];
self.documentInteractionController.delegate = self;
[self.documentInteractionController presentPreviewAnimated:YES];
UIDocumentInteractionControllerDelegate的代理方法。
#pragma mark -UIDocumentInteractionControllerDelegate代理方法
//這是必須實(shí)現(xiàn)的方法,否則不會(huì)顯示
- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller{
return self;
}
//設(shè)置預(yù)覽名稱
- (void)documentInteractionControllerWillBeginPreview:(UIDocumentInteractionController *)controller{
controller.name = @"附件預(yù)覽";
}
//點(diǎn)擊Done結(jié)束預(yù)覽
- (void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller{
}
再看一下QuickLook框架中如何打開(kāi)本地文件。使用的時(shí)候要導(dǎo)入這個(gè)框架:#import <QuickLook/QuickLook.h>。
#import <QuickLook/QuickLook.h>
@interface QuickLookViewController ()<QLPreviewControllerDataSource,
QLPreviewControllerDelegate>
@property (nonatomic,strong) QLPreviewController *previewController;
@end
@implementation QuickLookViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.title = @"附件預(yù)覽";
_previewController = [[QLPreviewController alloc] init];
_previewController.dataSource = self;
_previewController.delegate = self;
_previewController.view.frame = CGRectMake(0, 64, self.view.frame.size.width , self.view.frame.size.height);
//_previewController.currentPreviewItemIndex = 2;
[self addChildViewController:_previewController];
[self.view addSubview:_previewController.view];
[_previewController reloadData];
}
#pragma mark -代理方法
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index{
return self.fileURL;
}
//必須實(shí)現(xiàn)
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller{
return 1;
}
最后在看一下如何基于webView去下載,如果下載成功就基于本地打開(kāi),自動(dòng)緩存PDF word excel PPT等文件。
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
_openFileWebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, 0)];
_openFileWebView.delegate = self;
_openFileWebView.backgroundColor = [UIColor cyanColor];
[_openFileWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.fileURLString]]];
}
webView代理方法。
#pragma mark - webView代理
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
return YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSLog(@"網(wǎng)絡(luò)加載");
NSURL *targetURL = [NSURL URLWithString:self.fileURLString];
NSString *docPath = [self documentsDirectoryPath];
NSString *pathToDownloadTo = [NSString stringWithFormat:@"%@/%@", docPath, [targetURL lastPathComponent]];
NSFileManager *fileManager = [NSFileManager defaultManager];
//是否已經(jīng)下載
BOOL hasDownLoad= [fileManager fileExistsAtPath:pathToDownloadTo];
if (hasDownLoad) {
NSLog(@"下載過(guò)了");
self.fileURL = [NSURL fileURLWithPath:pathToDownloadTo];
_qlVC = [[QLPreviewController alloc]init];
_qlVC.delegate = self;
_qlVC.dataSource = self;
[self presentViewController:_qlVC animated:NO completion:nil];
}else {
NSLog(@"沒(méi)下載過(guò)");
NSURL *targetURL = [NSURL URLWithString:self.fileURLString];
NSData *fileData = [[NSData alloc] initWithContentsOfURL:targetURL];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
[fileData writeToFile:[NSString stringWithFormat:@"%@/%@", documentsDirectory, [targetURL lastPathComponent]] atomically:YES];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[_openFileWebView loadRequest:request];
}
}
QLPreviewController代理。
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
return self.fileURL;
}