iOS 文件预览(PDF、Excel、World等)之QuickLook框架

本文详细介绍如何在iOS应用中使用QuickLook库预览多种类型的文件,包括本地工程文件和网络URL下载的文件。文中提供了具体实现代码示例,涵盖预览控制器的设置、数据源配置及网络文件下载流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QuickLook之工程文件预览

一、简介
QuickLook库可以让我们的App在iPhone/iPad中直接预览各个文件了。官方的开发文档中说明其支持的文件类型有:

  1. iWork documents
  2. Microsoft Office documents (Office ‘97 and newer)
  3. Rich Text Format (RTF) documents
  4. PDF files
  5. Images
  6. Text files whose uniform type identifier (UTI) conforms to the public.text type (see Uniform Type Identifiers Reference)
  7. Comma-separated value (csv) files

二、包含哪些类
通过api可以看到有哪些Classes

	import QuickLook.QLBase//基础类
	import QuickLook.QLPreviewController //预览Controller
	import QuickLook.QLPreviewItem //单个数据源
	import QuickLook.QLPreviewingController //
	import QuickLook.QLThumbnailProvider
	import QuickLook.QLThumbnailReply
	import QuickLook.QLThumbnailRequest

三、使用demo

方式一:在自己Controller中展示文件如下:

//声明两个变量
 	fileprivate var preViewController = QLPreviewController.init()
 	//经过测试:可以是网络URLStr,必须要下载下来,可以用
    fileprivate var filePath = Bundle.main.path(forResource: "消息提醒", ofType: "xlsx") 
    
    //ViewDidLoad中设置变量
   		 preViewController.delegate = self
         preViewController.dataSource = self
        addChild(preViewController)
        view.addSubview(preViewController.view)
        //布局,可选
        preViewController.view.snp.makeConstraints { (make) in
            make.left.right.equalToSuperview()
            make.bottom.equalToSuperview()
            make.top.equalTo(topLayoutGuide.snp.bottom)
        }
//遵循代理、DataSource
extension YPreviewVC: QLPreviewControllerDelegate, QLPreviewControllerDataSource {
    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }
    
    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        return URL.init(fileURLWithPath: filePath!) as QLPreviewItem
    }
    
    
    func previewControllerDidDismiss(_ controller: QLPreviewController) {
        print("用户界面已消失")
    }
    
    func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool {
        return false
    }
    
}

方式二:直接调用:

 //直接调用跳转,用QLPreviewController的默认界面,自带系统的分享    self.navigationController?.pushViewController(preViewController, animated: true)

在这里插入图片描述

QuickLook之网络URL预览

一、把文件下载下来:Alamofire 5.0框架
方法如下:

fileprivate var filePath: URL?//声明的属性
fileprivate func reqestDownLoad() -> Void {
        let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)//这是下载存放哪里
        //自己文件名的在这里哦
       /* let destination: DownloadRequest.DownloadFileDestination = {[weak self] (url, response) in
            let docmentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
            let suggestFil = response.suggestedFilename == nil ? "http.xls" : response.suggestedFilename!
//            response.suggestedFilename?//文件名
            let newName = self!.fileName + "." + suggestFil.split(separator: ".").last!.description
            let fileRUL = docmentURL?.appendingPathComponent(newName)
            return (fileRUL!, [.removePreviousFile,.createIntermediateDirectories])
        }*/
        //urlTitle:urlString eg:http://file.xlsx
        Alamofire.download(urlTitle, to: destination).validate().responseData {[weak self] response in
//            case response.d
            debugPrint(response)
            print(response.temporaryURL)
            if response.destinationURL != nil {
                self!.filePath = response.destinationURL//下载完成的完整路径
                self!.preViewController.reloadData()//刷新即可展示,类似tableView
            }
            print(response.destinationURL)
        }
    }

//MARK: 代理方法
extension YPreFileVC: QLPreviewControllerDelegate, QLPreviewControllerDataSource {
    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        if filePath == nil {
            return 0
        }
        return 1 //可以使多个文件
    }
    
    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        return filePath! as QLPreviewItem
    }
    
    func previewControllerDidDismiss(_ controller: QLPreviewController) {
        print("用户界面已消失")
    }
    
    func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool {
        return false
    }
}

注意
如果是网络URL链接,下载下来的不想要保存到APP中可以直接在Controller视图消失的时候直接删除掉即可

override func viewDidDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        if filePath != nil {//删错文件
            do {
                 try             FileManager.default.removeItem(at: filePath!)

            }catch {
                print(error)
                print("删错失败啦")
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值