iOS-開啟本地或下載的Excel檔案
阿新 • • 發佈:2019-02-01
剛迭代個專案小功能,開啟本地或下載excel檔案。開啟本地的比較簡單,這裡只說下載檔案並且開啟。
主要步驟:
1.判斷沙盒裡面是否已經存在了檔案,沒有就下載,有就開啟。
2.下載檔案,下載完成後開啟。
下載檔案比較簡單,封裝一個下載的方法:
+ (void)downloadExcelFileWithUrlString:(NSString *)urlString filePath:(NSString *)filePath netProgress:(netProgress)netProgress success:(netSuccess)success{ AFHTTPSessionManager * manager = [AFHTTPSessionManager manager]; // 下載地址 NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; //開始請求下載 NSURLSessionDownloadTask * downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { //NSLog(@"下載進度:%f",downloadProgress.fractionCompleted); netProgress(downloadProgress); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { /* 設定下載到的位置 */ return [NSURL fileURLWithPath:filePath]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { //NSLog(@"下載完成"); success(response); }]; [downloadTask resume]; }
下載完成後,怎麼開啟檔案呢?有三個方法:
1.用webView開啟
- (UIWebView *)webView{ if (!_webView) { _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)]; _webView.backgroundColor = LightGRAY; _webView.scalesPageToFit = YES; NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL fileURLWithPath:self.filePath]]; [_webView loadRequest:request]; } return _webView; }
2.用系統提供的QLPreveiewController
開啟:
從iOS4.0後,蘋果推出新的檔案預覽控制元件:QLPreveiewController,支援pdf等格式檔案的線上閱讀功能。首先需要匯入系統庫檔案:#import <QuickLook/QuickLook.h>
,然後實現 QLPreviewControllerDataSource
代理方法。
QLPreviewController *previewController = [[QLPreviewController alloc] init]; previewController.view.frame = self.view.bounds; previewController.dataSource = self; [self addChildViewController:previewController]; [self.view addSubview:previewController.view];
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller{
return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{
//需要線上預覽的檔案的路徑
return [NSURL fileURLWithPath:self.filePath];
}
3.第三方開啟:
UIDocumentInteractionController
是從iOS 3.2的SDK開始支援的,他是直接繼承自NSObject。
UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:self.filePath]];
documentController.delegate = self;
[documentController presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];
self.documentController = documentController;
效果如下:
注意:這裡documentController的要是用強引用,ARC環境下,避免documentController例項使用完後被釋放,類似於用GCD建立定時器。