最近做文档加载,文档格式有PDF、Word、Excel、TXT,考虑到文档较大,在线加载的方式就不考虑了,决定换方案做本地加载,这样一来增加了下载的工作量,下载还要做断点续传、后台下载,奥买噶。但是在用户体验和工作量之间,果断选择了前者,做断点续传、本地加载。
苹果自带的QuickLook框架就可以实现文档的加载,没必要使用第三方框架reader等。创建一个QLPreviewController,QLPreviewController可以用present、push的方式引出。QLPreviewController有DataSource和Delegate相关方法,如果需要修改页面title,可自定义一个类,并服从QLPreviewItem协议。
#pragma mark QLPreviewControllerDataSource
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
return 1;
}
- (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
NSURL *url = [NSURL fileURLWithPath:self.savePath];
FotileFileItem *item = [[FotileFileItem alloc] init];
item.previewItemURL = url; //url
item.name = self.navTitle; //title
return item;
}
#pragma mark - QLPreviewControllerDelegate
- (void)previewControllerWillDismiss:(QLPreviewController *)controller {
//QLPreviewController消失后的操作
}
根据相关业务的需要,文档显示不做分享。要去掉引导航栏和工具栏、左下角的share按钮。我的方案是将QLPreviewController添加到当前视图控制器上,考虑到文件下载页面和文件显示页面最好在同一个页面,这样页面返回只需要一步操作。如果present的话,只能先把QLPreviewControlle给rdismiss掉,再pop出当前VC,这样看起来就是两步操作了。
@interface FotileDownloadVC ()< QLPreviewControllerDataSource, QLPreviewControllerDelegate>
@property (nonatomic, strong) QLPreviewController *qlpVC;
@end
- (QLPreviewController *)qlpVC {
if (!_qlpVC) {
if ([QLPreviewController canPreviewItem:[NSURL fileURLWithPath:self.savePath]]) {
self.qlpVC = [[QLPreviewController alloc] init];
_qlpVC.delegate = self;
_qlpVC.dataSource = self;
_qlpVC.view.frame = CGRectMake(0, StatusBar_H + NavBar_H, SCREEN_WIDTH, SCREEN_HEIGHT - (StatusBar_H + NavBar_H));
}
}
return _qlpVC;
}
- (void)openQLPreviewVC {
/**
不能使用present的方式
1、否则会导致左下角分享按钮隐藏不了
2、如果使用present出qlpVC,关闭当前VC需要两步操作,先dismiss掉qlpVC,再pop出当前VC,显示效果上会变成两步操作
*/
[self addChildViewController:self.qlpVC];
[self.view addSubview:self.qlpVC.view];
}
如果采用present、push的方式,要去掉引导航栏和工具栏、左下角的share按钮,相对困难,暂时没有好的方案,有好的方案可以相互交流。