iOS开发-QLPreviewController与UIDocumentInteractionController显示文档

iOS开发-QLPreviewController与UIDocumentInteractionController显示文档

在应用中,我们有时想预览文件, 可以使用QLPreviewController与UIDocumentInteractionController

一、QLPreviewController与UIDocumentInteractionController

QLPreviewController是一个 UIViewController ,用于管理预览项的用户体验。

UIDocumentInteractionController

官方文档:UIDocumentInteractionController 一种视图控制器,用于预览、打开或打印应用程序无法直接处理的文件格式的文件。名字叫控制器,但却是继承自 NSObject。

二、实现预览显示文档

使用QLPreviewController与UIDocumentInteractionController预览显示文档

复制代码
#import "INDocumentPreviewViewController.h"
#import <QuickLook/QuickLook.h>

@interface INDocumentPreviewViewController ()<QLPreviewControllerDataSource, UIDocumentInteractionControllerDelegate>

@property (strong, nonatomic) QLPreviewController *previewController;
@property (copy, nonatomic) NSURL *fileURL; //文件路径
@property(nonatomic,strong) UIDocumentInteractionController * documentVC;

@end

@implementation INDocumentPreviewViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    UIButton *shareBtn;
    shareBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    shareBtn.frame = CGRectMake(50, 100, 200, 46);
    shareBtn.layer.cornerRadius = 4;
    shareBtn.backgroundColor = [UIColor brownColor];
    [shareBtn setTitle:@"QLPreviewController" forState:UIControlStateNormal];
    [shareBtn addTarget:self action:@selector(showQLPreview) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:shareBtn];
    
    UIButton *shareBtn2;
    shareBtn2 = [UIButton buttonWithType:UIButtonTypeCustom];
    shareBtn2.frame = CGRectMake(50, 200, 200, 46);
    shareBtn2.layer.cornerRadius = 4;
    shareBtn2.backgroundColor = [UIColor brownColor];
    [shareBtn2 setTitle:@"UIDocumentInteraction" forState:UIControlStateNormal];
    [shareBtn2 addTarget:self action:@selector(documentInteraction) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:shareBtn2];
    
    self.previewController  =  [[QLPreviewController alloc]  init];
    self.previewController.dataSource  = self;
}

- (void)showQLPreview {
    self.fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"七牛实时音视频云白皮书.pdf" ofType:nil]];
    [self presentViewController:self.previewController animated:YES completion:nil];
    //刷新界面,如果不刷新的话,不重新走一遍代理方法,返回的url还是上一次的url
    [self.previewController refreshCurrentPreviewItem];
}


- (void)documentInteraction {
    self.fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"七牛实时音视频云白皮书.pdf" ofType:nil]];
    NSURL *url = self.fileURL;

    self.documentVC = [UIDocumentInteractionController interactionControllerWithURL:url];
    self.documentVC.delegate = self;

    dispatch_async(dispatch_get_main_queue(), ^{
        BOOL b = [self.documentVC presentPreviewAnimated:YES];
    });
}

#pragma mark - QLPreviewControllerDataSource
-(id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
    return self.fileURL;
}

- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController{
    return 1;
}

#pragma mark 代理方法
//为快速预览指定控制器
- (UIViewController*)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController*)controller
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    return self;
}
 
//为快速预览指定View
- (UIView*)documentInteractionControllerViewForPreview:(UIDocumentInteractionController*)controller
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    return self.view;
}
 
//为快速预览指定显示范围
- (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController*)controller
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    //    return self.view.frame;
    return CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}

@end

三、小结

iOS开发-QLPreviewController与UIDocumentInteractionController显示文档。

学习记录,每天不停进步。

相关推荐
微祎_7 分钟前
构建一个 Flutter 点击速度测试器:深入解析实时交互、性能度量与响应式 UI 设计
flutter·ui·交互
王码码203516 分钟前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_9151063217 分钟前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
2501_9151063226 分钟前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone
vistaup33 分钟前
OKHTTP 默认构建包含 android 4.4 的TLS 1.2 以及设备时间不对兼容
android·okhttp
常利兵39 分钟前
ButterKnife在Android 35 + Gradle 8.+环境下的适配困境与现代化迁移指南
android
撩得Android一次心动39 分钟前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
熊猫钓鱼>_>1 小时前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:Web开发框架应用的实现
python·学习·flutter
晚霞的不甘1 小时前
Flutter for OpenHarmony 构建简洁高效的待办事项应用 实战解析
flutter·ui·前端框架·交互·鸿蒙