我有一个TableView,在其中点击一个单元格时,它将在另一个viewController中打开一个特定的PDF文件。我添加了searchBar并将其设置为当它通过特定PDF的搜索结果进行过滤时,应该在新的viewController中打开该特定PDF。它不是;它要么通过第一个索引,要么通过第三个索引传递PDF,但我不确定为什么这样做。我相信可能是我如何在新的viewController上设置要查看的PDF。
我在这里查看了类似的问题,它们帮助我使搜索过滤正常工作,但最终没有解决传递与搜索的PDF相关的正确索引的问题。
这里是保存PDF的TableView的代码:
class TableViewController: UITableViewController, UISearchResultsUpdating{
var PDFs = [String]()
var selectedIndexPath: IndexPath = IndexPath()
var filteredPDFs = [String]()
var resultsSearchController = UISearchController()
var myIndex = 0
override func viewDidLoad() {
PDFs = ["1", "2", "3" ,"4", "5", "6", "7"]
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (resultsSearchController.isActive) {
return filteredPDFs.count
} else {
return PDfs.count
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! Cell
if (resultsSearchController.isActive) {
cell.textLabel?.text = filteredPDFs[indexPath.row]
} else {
cell.PDFKitLabel?.text = PDFs[indexPath.row]
}
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if (self.resultsSearchController.isActive) {
myIndex = filteredPDFs.firstIndex(of: filteredPDFs[selectedIndexPath.row])!
} else {
self.selectedIndexPath = indexPath
}
self.performSegue(withIdentifier: "openPDF", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "openPDF" {
let detailViewController = segue.destination as! DetailViewController
detailViewController.pdfName = PDFs[self.selectedIndexPath.row]
}
}
以下是打开PDF的ViewController的代码:
class DetailViewController: UIViewController {
var fldName: String?
override func viewDidLoad() {
super.viewDidLoad()
let pdfView = PDFView()
pdfView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(pdfView)
pdfView.displayMode = .singlePageContinuous
pdfView.displaysAsBook = true
pdfView.displayDirection = .vertical
let fileURL = Bundle.main.url(forResource: pdfName, withExtension: "pdf")
pdfView.document = PDFDocument(url: fileURL!)
}
我希望能够在搜索特定的PDF时从搜索结果中选择PDF标题,然后将该PDF传递给新的viewController进行查看,但是如前所述,当尝试从搜索结果传递PDF时它只会打开索引0中的PDF,而不会打开搜索到的特定PDF。