如何解决无法处理多选
我正在尝试在我的表格视图中使用多项选择(正在编辑)来实现删除操作,该表格视图存储在 Firebase 中,列出了 pdf。但首先,我想确保多项选择是否有效。
即使多选为真并且选择了多个单元格,输出也告诉我只选择了一个单元格。此外,如果选择从第一个单元格开始,则输出(索引)保持为 0。如果选择反向开始,则为 4,3,2,1,0。我需要帮助来处理这个问题。
请看下面的代码。谢谢。
import UIKit
import Firebase
import PDFKit
class IcsViewcontroller: UIViewController,UISearchBarDelegate {
var preImage : UIImage?
let cellSpacingHeight: CGFloat = 20
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var pdfListView: UITableView!
@IBOutlet weak var spinner: UIActivityIndicatorView!
var pdfList = [pdfClass]()
var searchall = [pdfClass]()
var searching = false
var selectedPdf = [pdfClass]()
override func viewDidLoad() {
super.viewDidLoad()
let editButton = UIBarButtonItem(title: "Edit",style: .plain,target: self,action: #selector(showEditing(_:)))
navigationItem.rightBarButtonItem = editButton
pdfListView.delegate = self
pdfListView.dataSource = self
searchBar.delegate = self
self.pdfListView.isHidden = true
getPdf()
}
override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
if searching {
let destination = segue.destination as! PdfKitViewController
let selectedindexPath = pdfListView.indexPathForSelectedRow
destination.pdf = searchall[selectedindexPath!.row]
} else {
let destination = segue.destination as! PdfKitViewController
let selectedindexPath = pdfListView.indexPathForSelectedRow
destination.pdf = pdfList [selectedindexPath!.row]
}
}
@objc func showEditing(_ sender: UIBarButtonItem)
{
if(self.pdfListView.isEditing == true)
{
self.pdfListView.isEditing = false
self.navigationItem.rightBarButtonItem?.title = "Edit"
}
else
{
self.pdfListView.allowsMultipleSelectionDuringEditing = true
self.pdfListView.isEditing = true
self.navigationItem.rightBarButtonItem?.title = "Done"
}
}
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
if searchBar.text == nil || searchBar.text == "" {
searching = false
} else {
searching = true
}
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searching = false
searchBar.text = ""
self.pdfListView.reloadData()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searching = false
}
func searchBar(_ searchBar: UISearchBar,textDidChange searchText: String) {
if searchBar.text == nil || searchBar.text == "" {
searchall = pdfList
searching = false
pdfListView.reloadData()
} else {
searching = true
searchall = pdfList.filter({($0.pdf_name?.lowercased().prefix(searchText.count))! == searchText.lowercased() })
pdfListView.reloadData()
}
}
func getPdf () {
spinner.startAnimating()
let docRef = Storage.storage().reference().child("ICS_Documents")
docRef.listAll{ (result,error ) in
if let error = error {
let alert = UIAlertController(title: "Error",message: "No Database Connection",preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "OK",style: UIAlertAction.Style.default,handler: nil))
self.present(alert,animated: true,completion: nil)
}
for item in result.items {
let storeageLocation = String( describing : item)
let gsReference = Storage.storage().reference(forURL: storeageLocation)
gsReference.downloadURL{ url,error in
if let error = error{
print(error)
} else {
let pdf_name = String( item.name)
let pdf_url = url?.absoluteString
let thumbnailSize = CGSize(width: 100,height: 100)
let thmbnail = self.generatePdfThumbnail(of: thumbnailSize,for: url!,atPage: 0)
let pdfall = pdfClass(pdf_name: pdf_name,pdf_url: pdf_url!,pdf_preview: thmbnail!)
self.pdfList.append(pdfall)
}
dispatchQueue.main.async {
self.pdfList.sort{ $0.pdf_name ?? "" < $1.pdf_name ?? ""}
self.pdfListView.reloadData()
self.spinner.stopAnimating()
self.pdfListView.isHidden = false
}
}
}
}
}
func generatePdfThumbnail(of thumbnailSize: CGSize,for documentUrl: URL,atPage pageIndex: Int) -> UIImage? {
let pdfDocument = PDFDocument(url: documentUrl)
let pdfDocumentPage = pdfDocument?.page(at: pageIndex)
return pdfDocumentPage?.thumbnail(of: thumbnailSize,for: PDFdisplayBox.trimBox)
}
}
extension IcsViewcontroller : UITableViewDelegate,UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
if searching{
return searchall.count
}else {
return pdfList.count
}
}
func tableView(_ tableView: UITableView,heightForHeaderInSection section: Int) -> CGFloat {
return cellSpacingHeight
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "pdfCell",for: indexPath) as! pdfCellTableViewCell
let varcell : pdfClass
if searching {
varcell = searchall [indexPath.row]
} else {
varcell = pdfList [indexPath.row]
}
cell.configure(name: varcell.pdf_name!,pdfthumbnail: varcell.pdf_preview!)
return cell
}
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
var indx : pdfClass
if searching{
indx = searchall[indexPath.row ]
}else {
indx = pdfList[indexPath.row]
}
self.selectdeselectcell(tableview: tableView,indexpath: indexPath)
print("selected")
if pdfListView.isEditing {
func shouldPerformSegue(withIdentifier identifier: String,sender: Any?) -> Bool {
return !tableView.isEditing
}
}else{
performSegue(withIdentifier: "toPdfKit",sender: indx)
print(indexPath.row)
}
}
func tableView(_ tableView: UITableView,diddeselectRowAt indexPath: IndexPath) {
self.selectdeselectcell(tableview: tableView,indexpath: indexPath)
print("deselected")
}
func selectdeselectcell(tableview : UITableView,indexpath : IndexPath){
if pdfListView.isEditing{
self.selectedPdf.removeAll()
if let selected = pdfListView.indexPathForSelectedRow{
print(selected)
}
}else {
return
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。