iOS开发之UIDocumentInteractionController

在App的开发过程中,我们避免不了要打开软件中的文件,例如:Excel文件,Word文件,图片文件等不同格式的文件或者想要通过第三方的App来打开这些文件,那么我们就要用到UIDocumentInteractionController和Quick Look来解决这些问题了。

在iOS系统跨App分享内容的几种常用技术,比如 URL Scheme, AirDrop,UIDocumentInteractionController , UIActivityViewController
UIDocumentInteractionController是从iOS 3.2的SDK开始支持的,它是直接继承的 NSObject。

我们就介绍UIDocumentInteractionController的简单使用。

UIDocumentInteractionController
1.展示一个可以操作我们分享的文档类型的第三方App列表
2.在第一条展示列表的基础上添加额外的操作,比如 复制 , 打印 , 预览 , 保存 等。
3.结合 Quick Look 框架直接展示文档内容

核心代码如下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    
    
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"004" withExtension:@"png"];
    
    //    NSString *docu = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    //    NSString *filePath = [docu stringByAppendingPathComponent:@"004.png"];
    //    NSURL *url = [NSURL fileURLWithPath:filePath];
    
    
    self.document = [UIDocumentInteractionController interactionControllerWithURL:url];
    self.document.delegate = self;
    
    // 不展示可选操作
    //    [self.document presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];
    
    
    // 展示可选操作
    // 可结合代理方法documentInteractionControllerViewControllerForPreview:显示预览
    [self.document presentOptionsMenuFromRect:self.view.bounds inView:self.view animated:YES];
    
}

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller {
    return self;
}
/**
 *  文件分享面板退出时调用
 */
- (void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller {
    NSLog(@"dismiss");
}

/**
 *  文件分享面板弹出的时候调用
 */
- (void)documentInteractionControllerWillPresentOpenInMenu:(UIDocumentInteractionController *)controller {
    NSLog(@"WillPresentOpenInMenu");
    
}

/**
 *  当选择一个文件分享App的时候调用
 */
- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(nullable NSString *)application {
    NSLog(@"begin send : %@", application);
}
效果如下:

                            

注意点有:
1.要实现UIDocumentInteractionController的代理方法必须遵守UIDocumentInteractionControllerDelegate协议。
2.UIDocumentInteractionController属性必须使用retain或strong修饰,控制器必须持有该对象。
3.代码中的两个路径都可以使用。
4.弹出面板的方法一个不展示可选操作,一个展示可选操作。
5.直接使用presentPreviewAnimated:方法弹出预览。
6.结合代理方法documentInteractionControllerViewControllerForPreview:显示预览操作。


直接预览文件还有一个方式:QuickLook,使用方式如下:
1.向项目导入QuickLook.framework。
2.在需要的地方包含头文件#import <QuickLook/QuickLook.h>
3.声明预览控制器

@property (nonatomic, strong) QLPreviewController *preViewController;
4.遵守协议和数据源QLPreviewControllerDelegate, QLPreviewControllerDataSource

核心代码:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    // 创建预览控制器
    self.preView = [[QLPreviewController alloc] init];
    // 设置代理和数据源
    self.preView.delegate = self;
    self.preView.dataSource = self;
    
    [self.preView setCurrentPreviewItemIndex:0];
    [self presentViewController:self.preView animated:YES completion:nil];
    
}
#pragma mark QLPreviewControllerDataSource
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
    return 1;
}
- (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
    NSString *docu = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filePath = [docu stringByAppendingPathComponent:@"004.png"];
    NSURL *url = [NSURL fileURLWithPath:filePath];
    
    return url;
    
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS开发中,触摸事件处理是非常重要的,因为用户与应用程序的交互主要是通过触摸屏幕来完成的。iOS提供了一整套触摸事件处理机制,包括手势识别、触摸事件响应等。下面我们来介绍一下iOS中常用的触摸事件处理方法。 1. 触摸事件响应方法 在iOS中,触摸事件主要由以下4个方法来响应: - touchesBegan:withEvent: //手指开始接触屏幕 - touchesMoved:withEvent: //手指在屏幕上移动 - touchesEnded:withEvent: //手指离开屏幕 - touchesCancelled:withEvent: //触摸事件取消 这些方法都在UIView类中定义,所以如果你的应用程序需要响应触摸事件,你需要重写UIView的这些方法。 2. 手势识别器 在iOS中,手势识别器是一种非常方便的触摸事件处理方式。手势识别器可以识别出一些常用的手势,比如轻击、长按、拖动、捏合等等,并且可以通过回调方法来处理这些手势。 手势识别器有很多种,比如UITapGestureRecognizer、UILongPressGestureRecognizer、UIPanGestureRecognizer、UIPinchGestureRecognizer等等。使用手势识别器可以让你的应用程序更加灵活,同时也可以提高用户体验。 3. 响应者链 在iOS中,事件的传递是通过响应者链来完成的。当用户发生了触摸事件时,事件会从最上层的UIWindow开始传递,直到找到第一个响应该事件的对象。如果没有任何对象响应该事件,事件就会被丢弃。 因此,在处理触摸事件时,你需要注意响应者链的结构,确保事件能够正确地传递到你想要处理事件的对象。 总之,在iOS开发中,触摸事件处理是一个非常重要的部分,需要我们认真对待。通过合理地使用触摸事件处理方法和手势识别器,我们可以为用户提供更加灵活、友好的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值