ios - Swift/IOS:如何从 Firebase 获取 PDF 并将其显示在 webkit 中?
问题描述
在 firebase 中,我有一个包含 PDF 的存储和一个对存储的 PDF 的引用以及 PDF 名称的集合。
我正在检索集合文档并在表格视图中显示标题。我希望能够单击 tableview 单元格,然后在另一个视图控制器的 webkit 视图中显示 pdf。
如何获取存储中的 PDF 并将其显示在 webkit 视图中?
到目前为止我的代码:
处理程序
class PDFHandler {
static let db = Firestore.firestore()
static let storage = Storage.storage()
static var list = [PDF]()
static var downloadURL : String?
static func Create(title: String, url: String){
}
static func startListener(tableView: UITableView){
print("Listening has begun")
db.collection("PDF").addSnapshotListener { (snap, error) in
if error == nil{
self.list.removeAll()
for pdf in snap!.documents{
let map = pdf.data()
let head = map["Headline"] as! String
let url = map["URL"] as? String ?? "empty"
let newPDF = PDF(id: pdf.documentID, headline: head, url: url)
print(newPDF)
self.list.append(newPDF)
}
DispatchQueue.main.async {
tableView.reloadData()
}
}
}
}
static func downloadPdfs(pdfID: String, pdfurl: String){
print("Download initiated")
let pdfRef = storage.reference(withPath: pdfID)
pdfRef.getData(maxSize: 99999999999) { (data, error) in
if error == nil{
print("Success downloading PDF")
DispatchQueue.main.async {
}
}else{
print("Error fetching pdf")
}
}
}
static func getSize() -> Int{
return list.count
}
static func getPDFat(index: Int) -> PDF{
return list[index]
}
}
表视图
class ReportViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
PDFHandler.startListener(tableView: tableView)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return PDFHandler.getSize()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PDFCell")
cell?.textLabel?.text = PDFHandler.getPDFat(index: indexPath.row).headline
return cell!
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? PDFViewController{
destination.rowNumber = tableView.indexPathForSelectedRow!.row
}
}
}
PDFView VC
import UIKit
import WebKit
class PDFViewController: UIViewController, WKUIDelegate {
@IBOutlet weak var pdfview: WKWebView!
var rowNumber = 0
var url = ""
override func viewDidLoad() {
super.viewDidLoad()
let myUrl = URL(string: "")
let myRequest = URLRequest(url: myUrl!)
pdfview.load(myRequest)
}
override func loadView() {
let webConfig = WKWebViewConfiguration()
pdfview = WKWebView(frame: .zero, configuration: webConfig)
pdfview.uiDelegate = self
view = pdfview
}
}
解决方案
推荐阅读
- javascript - 创建带有小胡子的动态下拉列表
- swiftui - 如何在 SwiftUI TabView 中保持滚动位置
- python - Django Forms.py 电子邮件和电话验证
- android - Unity 2018.3,升级到 Catalina 后,在 Android (ndk n16b) 上进行 il2cpp 编译期间链接器崩溃
- c - 数值结果超出范围 semctl c
- html - 按钮导致输入字段在悬停时向上移动(在 chrome 上)
- java - Solr 中的完全外连接
- javascript - 无法在 Google 跟踪代码管理器中提取数据层变量
- fonts - Latex 为header定义中文字体样式
- python - 使用条件和函数向量化嵌套循环