0
点赞
收藏
分享

微信扫一扫

iOS在线文件预览

在上一篇http://www.jianshu.com/p/00e76c936121
中,我们了解了iOS本地文件预览实现的几种方式,接下来我们在上一篇的基础之上来分析一下在线文件的预览。

一、webView####

加载方法:

self.fileURLString = @“文件url地址”;  
openFileWebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height)];  
openFileWebView.delegate = self;  
[openFileWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.fileURLString]]];  

代理方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType  
{  
      
      
    return YES;  
}  
#pragma mark - Web代理  
- (void)webViewDidFinishLoad:(UIWebView *)webView  
{  
    NSURL *targetURL = [NSURL URLWithString:self.fileURLString];  
      
    NSString *docPath = [self documentsDirectoryPath];  
    NSString *pathToDownloadTo = [NSString stringWithFormat:@"%@/%@", docPath, [targetURL lastPathComponent]];  
    NSFileManager *fileManager = [NSFileManager defaultManager];  
    BOOL hasDownLoad= [fileManager fileExistsAtPath:pathToDownloadTo];  
    if (hasDownLoad) {  
        self.fileURL = [NSURL fileURLWithPath:pathToDownloadTo];  
        QLPreviewController *qlVC = [[QLPreviewController alloc]init];  
        qlVC.delegate = self;  
        qlVC.dataSource = self;  
        [self.navigationController pushViewController:qlVC animated:YES];  
        //  
    }  
    else {  
        NSURL *targetURL = [NSURL URLWithString:self.fileURLString];  
          
        NSData *fileData = [[NSData alloc] initWithContentsOfURL:targetURL];  
        // Get the path to the App's Documents directory  
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
        NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder  
        [fileData writeToFile:[NSString stringWithFormat:@"%@/%@", documentsDirectory, [targetURL lastPathComponent]] atomically:YES];  
        NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];  
        [openFileWebView loadRequest:request];  
    }  
      
    NSLog(@"webViewDidFinishLoad");  
}  
  
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error  
{  
    NSLog(@"didFailLoadWithError");       
}  

- (NSString *)documentsDirectoryPath {  
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    NSString *documentsDirectoryPath = [paths objectAtIndex:0];  
    return documentsDirectoryPath;  
}  

我们根绝一个无误的地址,就能打开一个文件了

二、QuickLook####

导入#import <QuickLook/QuickLook.h>
实现QLPreviewControllerDataSource,QLPreviewControllerDelegate
其具体实现方法如下:


QLPreviewController *qlController = [[QLPreviewController alloc]init];
qlController.delegate = self;
qlController.dataSource = self;
[qlController setCurrentPreviewItemIndex:0];
[self presentViewController:qlController animated:YES completion:nil];


- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {  
    return self.fileURL;  
}  
  
- (void)previewControllerWillDismiss:(QLPreviewController *)controller {  
    NSLog(@"previewControllerWillDismiss");  
}  
  
- (void)previewControllerDidDismiss:(QLPreviewController *)controller {  
    NSLog(@"previewControllerDidDismiss");  
}  
  
- (BOOL)previewController:(QLPreviewController *)controller shouldOpenURL:(NSURL *)url forPreviewItem:(id <QLPreviewItem>)item{  
    return YES;  
}  
  
- (CGRect)previewController:(QLPreviewController *)controller frameForPreviewItem:(id <QLPreviewItem>)item inSourceView:(UIView * __nullable * __nonnull)view{  
    return CGRectZero;  
}  
举报

相关推荐

0 条评论