IOS UIDocumentInteractionController 第三方应用打开沙盒内的文件

项目需求:

    项目通过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://  否则点击第三方应用是没有任何反应,暂不清楚原理。

转载于:https://my.oschina.net/u/182757/blog/634460

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值