OC学习66:UIDocumentInteractionController 预览或分享文件

张建 lol

前言

  • UIDocumentInteractionControllerOC 语言的一个类,但是他并 不是一个 controller,而是一个继承自 NSObject 类。

  • UIDocumentInteractionController 是一个强大的 文档阅读器

作用

  • 预览文档,包括 word文档、excel文档、pdf文档 等等

  • 调用iPhone里第三方的app打开文档

  • 将文档用系统级分享到各个应用中(包括QQ、微信、邮箱等)

  • 如果有条件配备支持AirPrint的打印机的话,就可以直接打印文档

  • 一次只能浏览一个文件

使用

  • 声明
1
2
3
4
5
6
7
#import "ViewController.h"
// 代理
@interface ViewController ()<UIDocumentInteractionControllerDelegate>

// 属性
@property (nonatomic,strong)UIDocumentInteractionController * document;
@end
  • 调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma mark - 预览 文件
- (void)previewFileWithFilePath:(NSString *)filePath{
NSURL * fileURL = [NSURL fileURLWithPath:filePath];
self.documentC = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
// 设置分享代理
self.documentC.delegate = self;
// 哪类文件支持第三方打开,这里不证明就代表所有文件!
// _document.UTI = @"com.microsoft.word.doc";
// 判断手机中有没有应用可以打开该文件并打开分享界面
// 用户预览文件
BOOL canOpen = [self.documentC presentPreviewAnimated:YES];
if (!canOpen) {
NSLog(@"预览失败");
}
}
  • 代理回调
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
-(BOOL)documentInteractionController:(UIDocumentInteractionController *)controller canPerformAction:(nullable SEL)action{
// 响应方法
NSLog(@"12 %s", __func__);
return YES;
}
-(BOOL)documentInteractionController:(UIDocumentInteractionController *)controller performAction:(nullable SEL)action{
//
NSLog(@"13 %s", __func__);
return YES;
}
-(void)documentInteractionControllerWillPresentOptionsMenu:(UIDocumentInteractionController *)controller{
// 页面显示后响应
NSLog(@"9 %s", __func__);
}
-(void)documentInteractionControllerDidDismissOptionsMenu:(UIDocumentInteractionController *)controller{
// 取消时响应
NSLog(@"10 %s", __func__);
}
// 返回预览的控制器
-(UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller{
NSLog(@"1 %s", __func__);
return self;
}
// 返回预览视图
-(UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller{
NSLog(@"2 %s", __func__);
return self.view;
}
// 返回预览视图的frame
-(CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller{
NSLog(@"3 %s", __func__);
return self.view.frame;
}
// 文件分享面板退出时调用
-(void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller{
NSLog(@"4 %s", __func__);
NSLog(@"dismiss");
}
// 文件分享面板弹出的时候调用
-(void)documentInteractionControllerWillPresentOpenInMenu:(UIDocumentInteractionController *)controller{
NSLog(@"5 %s", __func__);
NSLog(@"WillPresentOpenInMenu");
}
// 当选择一个文件分享App的时候调用
-(void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(nullable NSString *)application{
NSLog(@"6 %s", __func__);
NSLog(@"begin send : %@", application);
}
// Preview presented/dismissed on document. Use to set up any HI underneath.
-(void)documentInteractionControllerWillBeginPreview:(UIDocumentInteractionController *)controller{
NSLog(@"7 %s", __func__);
}
// 完成时响应
-(void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller{
NSLog(@"8 %s", __func__);
}
-(void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(nullable NSString *)application{
NSLog(@"11 %s", __func__);
}

后续

后续讲 QLPreviewController可以一起浏览多个文件

  • Post title:OC学习66:UIDocumentInteractionController 预览或分享文件
  • Post author:张建
  • Create time:2023-06-29 08:28:57
  • Post link:https://redefine.ohevan.com/2023/06/29/OC/OC学习66:UIDocumentInteractionController-预览或分享文件/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
OC学习66:UIDocumentInteractionController 预览或分享文件