搜索
您的当前位置:首页正文

iOS 打开Doc等文件

来源:知库网

不知道大家有没有遇到过这样的需求,用App打开office文档,哈哈,很多人会说不可以,其实是可以的,而且有很多种方式。
一共有三种方式:(按照苹果发布的时间来说)

第一种方式:UIDocumentInteractionController
- (void)readDocWithDucument{
    NSString * ducumentLocation = [[NSBundle mainBundle]pathForResource:@"用户模块接口" ofType:@"docx"];
    NSURL *url = [NSURL fileURLWithPath:ducumentLocation];
    _documentInteractionController= [UIDocumentInteractionController interactionControllerWithURL:url];
    _documentInteractionController.delegate = self;
//    [_documentInteractionController presentPreviewAnimated:YES];
    [_documentInteractionController presentOptionsMenuFromRect:CGRectZero inView:self.view animated:YES];
}```
遵循代理方法`<UIDocumentInteractionControllerDelegate>`

pragma mark - UIDocumentInteractionController 代理方法

  • (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller{
    return self;
    }
  • (UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller{
    return self.view;
    }
  • (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller{
    return self.view.bounds;
    }```
    如果方法写在- (void)viewDidLoad里面的话会出现问题找不到当前view,所以建议解决办法是利用下面这种调用方式
[self performSelectorOnMainThread:@selector(readDocWithDucument) withObject:nil waitUntilDone:NO];

对于声明documentInteractionController

@property (nonatomic, strong) UIDocumentInteractionController *documentInteractionController;
第二种方式:QLPreviewController

引入QuickLook.framework框架
引入头文件#import <QuickLook/QuickLook.h>
遵循代理<QLPreviewControllerDataSource>

- (void)quickLook{
    self.view.backgroundColor = [UIColor grayColor];
    QLPreviewController * preVC = [[QLPreviewController alloc]init];
    preVC.dataSource = self;
    [self presentViewController:preVC animated:YES completion:nil];
    
}
#pragma mark - QLPreviewControllerDataSource 代理方法
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller{
    return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{
    NSString * ducumentLocation = [[NSBundle mainBundle]pathForResource:@"用户模块接口" ofType:@"docx"];
    NSURL *url = [NSURL fileURLWithPath:ducumentLocation];
    return  url;
}

同样会有加载view的问题:如果方法写在- (void)viewDidLoad里面的话会出现问题找不到当前view,所以建议解决办法是利用下面这种调用方式

[self performSelectorOnMainThread:@selector(readDocWithDucument) withObject:nil waitUntilDone:NO];
第三种方式:UIWebView

遵循代理<UIWebViewDelegate>

- (void)readDocfile{
    NSString * ducumentLocation = [[NSBundle mainBundle]pathForResource:@"用户模块接口" ofType:@"docx"];
    NSURL *url = [NSURL fileURLWithPath:ducumentLocation];
    
    UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.frame];
    webView.delegate = self;
    webView.multipleTouchEnabled = YES;
    webView.scalesPageToFit = YES;

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];
    
    [self.view addSubview:webView];
}

前两天发现可以用系统自带的浏览器打开在线文件的地址,word的地址也是可以打开的。

Top