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

iOS 文件预览

    • QuickLook之工程文件预览
    • QuickLook之网络URL预览

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)

iOS 文件预览(PDF、Excel、World等)之QuickLook框架_第1张图片

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("删错失败啦")
            }
        }
    }

你可能感兴趣的:(Swift,iOS,QuickLook,OC,File,PDF,Excel,Swift,5.0)