(0090)iOS开发之本地文件预览的三种方法(1)

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

UIDocumentInteractionController

怎么通过使用UIDocumentInteractionController来预览、分享pdf?

一、主要作用:
  1. 预览类似pdf、doc、ppt等类型文件的类。
  2. 可以将用户接收到的文件分享到用户手机上的其他App中。
二、使用方法:
1.创建一个UIDocumentInteractionController类的属性:
@property (nonatomic,strong)UIDocumentInteractionController * document;
2.遵循UIDocumentInteractionControllerDelegate
@interface DocumentControllerTest ()<UIDocumentInteractionControllerDelegate>
3.初始化document

把一个ios.pdf文件放到工程中

@implementation DocumentControllerTest

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"Document 展示PDF ";
    self.view.backgroundColor = [UIColor whiteColor];
    
    // 1.指定要分享的链接
    
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"ios" ofType:@"pdf"];
    NSURL *url = [NSURL fileURLWithPath:filePath];
    _documentController = [UIDocumentInteractionController interactionControllerWithURL:url];
    _documentController.delegate = self;
    
    // 1 直接打开预览 pdf
    [_documentController presentPreviewAnimated:YES]; // 预览文件
    
    // 2 直接显示包含预览的菜单项:分享等
    // [_documentController presentOptionsMenuFromRect:self.view.bounds inView:self.view animated:YES]; // 菜单操作
}

#pragma mark --  UIDocumentInteractionControllerDelegate --

- (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;
}

- (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__);
}

三、运行效果

// 1 直接打开预览 pdf,右上角红框的按钮,可以更多操作如:分享、存储、打印等
在这里插入图片描述

方式2: // 2 直接显示包含预览的菜单项 (可以选择:“快速查看”开pdf)
在这里插入图片描述

问题:
iOS presentOptionsMenuFromRect 点击快速查看 Quick Look没反应
是UIDocumentInteractionController 创建的是局部变量。把它改成全局变量就好了。

感谢:
UIDocumentInteractionController对文件的预览,或分享等操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
文件存储在Swift iOS开发中是一个重要的主题。Swift提供了多种方法来进行文件存储和管理。其中一种常见的方法是使用沙盒机制。沙盒是每个iOS应用程序的独立文件系统,每个应用程序都有自己的文件目录,其他应用程序无法访问其中的文件。 在iOS中,常见的文件存储方式包括: 1. 用户文档目录(Documents Directory):用于存储用户生成的数据,例如用户创建的文件或下载的内容。这些文件会被自动备份到iCloud,并在需要时可以从其他设备访问。可以使用`FileManager`类的`urls(for:in:)`方法获取该目录的URL。 2. 应用程序支持文件目录(Application Support Directory):用于存储应用程序的数据文件,例如数据库文件和配置文件。这些文件不会被自动备份到iCloud。可以使用`FileManager`类的`urls(for:in:)`方法获取该目录的URL。 3. 缓存目录(Caches Directory):用于存储临时数据,例如网络请求的缓存文件。这些文件不会被自动备份到iCloud,可能会在系统需要释放存储空间时被删除。可以使用`FileManager`类的`urls(for:in:)`方法获取该目录的URL。 4. 临时目录(Temporary Directory):用于存储临时文件,例如在应用程序运行期间创建的临时文件。这些文件可能会在应用程序终止后自动被删除。可以使用`FileManager`类的`temporaryDirectory`属性获取该目录的URL。 此外,还可以使用`UserDefaults`类来进行轻量级的数据存储,例如存储用户的偏好设置。 在SwiftUI中,还可以使用`FileImporter`修改器方法来将Files App中的文件导入到应用程序中。这个功能是从SwiftUI 2.0开始引入的,可以方便地将文件导入到应用程序中进行处理。 总之,Swift提供了多种方法来进行文件存储和管理,开发者可以根据具体需求选择适合的方法来处理文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SwiftUI 实现一个 iOS 上 Files App 兼容的文件资源管理器](https://blog.csdn.net/mydo/article/details/130714434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值