In firebase, I have a storage with PDF's and a collection that has a reference to the stored PDF, along with the name of the PDF.
I'm retrieving the collection documents and display the headline in a tableview. I want to be able to click the tableview cell, then display the pdf in a webkit view in another viewcontroller.
How do I fetch the PDF in storage and display it in webkit view?
My code so far:
Handler
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]
}
}
Tableview
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
}
}