项目需求:
项目通过web下载文件,存储到IOS沙盒内,用户可以打开下载的文件。由于下载的文件有各种类型(doc,xls,jpg等等),所以只能通过第三方app打开。
UIDocumentInteractionController 是IOS提供共享文件(打开文件)的类。
下面直接用代码说明
1. viewController必须要实现此协议代理 UIDocumentInteractionControllerDelegate
@interface PublicityTableViewCtrl : BaseListViewCtrl <UIDocumentInteractionControllerDelegate>
@end
2.实现此协议的三个方法:
- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller {
return self;
}
- (UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller {
return self.view;
}
- (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller {
return self.view.frame;
}
3.打开文件的点击事件
//文件在沙盒中的全路径
NSString *path = [DownloadManager getFileFullPath:task.fileName] ;
//打开文件[这里的path 一定不能加file:// 否则就无法打开,切记切记]
NSURL *filePathURL = [NSURL fileURLWithPath:path];
NSFileManager *fileManager = [NSFileManager defaultManager];
//检查附件是否存在
if (![fileManager fileExistsAtPath:path]) {
//文件已不存在,重新下载
task.downloadStatus = DownloadStatusFailed ;
[[DownloadManager sharedInstance] startDownload:task.fileId] ;
return ;
}
self.documentController = [UIDocumentInteractionController interactionControllerWithURL:filePathURL];
self.documentController.delegate = self ;
BOOL result = [self.documentController presentOptionsMenuFromRect:CGRectMake(0, 0, 200, 200) inView:self.view animated:NO];
if (!result) {
[self showMsg:@"暂时无法打开此类型的文件"] ;
}
以上三步,即可通过第三方app打开文件。
注意:在通过文件路径字符串创建 NSURL 对象时,
NSURL *filePathURL = [NSURL fileURLWithPath:path];
一定不要加file:// 否则点击第三方应用是没有任何反应,暂不清楚原理。