目标预览
例如自家App里的PDF文件,拷贝到"微信"做进一步处理。
IMG_F1F35F792053-1.jpeg
方案
Apple在iOS 3.2以后在UIKit framework
里提供了一个类名为UIDocumentInteractionController
的类。详见官方文档Document Interaction Programming Topics for iOS
@interface ViewController ()<UIDocumentInteractionControllerDelegate>
@property (nonatomic, strong) UIDocumentInteractionController *documentVC;
@end
@implementation ViewController
- (void)showDocumentVC {
self.documentVC = [UIDocumentInteractionController interactionControllerWithURL:fileUrl];
self.documentVC.delegate = self;
[self.documentVC presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
}
#pragma mark - UIDocumentInteractionControllerDelegate
//按需实现协议方法
@end
踩到的坑
背景:在bundle里有个PDF文件,使用上面的代码,在别的App中打开这个PDF文件,iOS 11之前都没有什么问题,很完美。升级到iOS 11之后,所有的三方App(比如拷贝到"微信"),包括Apple自己出品的App(比如拷贝到"iBooks")都是点击之后没能调起对应的目标App(代理方法- (void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application
被调用)。
解决方案:把bundle里的文件复制到沙盒temp
文件夹下,从temp
文件夹下取文件就可以了。也可以把文件复制到Document
/Library
/Cache
文件夹下。
网友评论