如何在表视图的底部添加一个按钮以删除多行?

时间:2018-02-18 23:59:54

标签: ios swift uitableview button

我目前正在创建图书馆应用。我有一个表视图,我已经设置了具有不同书名的数组。我还设置了勾选标记,以便用户可以勾选某些标题。我刚刚在表格视图的底部添加了一个按钮,以便用户可以勾选标题,然后单击按钮以将其从屏幕上删除,有点像检查它们。但是,按钮由于某种原因没有单击,标题也不会从屏幕上删除。我在这个网站上看了很多其他的回复,我甚至尝试了一些,但它们似乎都没有用。有人可以指点我正确的方向吗?我在下面发布我当前的代码。

import UIKit

class CheckOutViewController: UITableViewController {
    var books = ["The Grapes of Wrath","The Great Gatsby","Anthem","Brave New World","To Kill A Mockingbird","Of Mice And Men", "Animal Farm", "War and Peace", "Don Quixote","War and Peace","Romeo and Juliet","Gulliver's Travels"]

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return books.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = books[indexPath.row]
        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCellAccessoryType.checkmark{
            tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none
        }
        else{
            tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
        }
    }

    @IBAction func checkOutPressed(_ sender: Any) {
        func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
            func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
            {
                if editingStyle == .delete
                {
                    books.remove(at: indexPath.row)
                    self.tableView.reloadData()
                }
            }

            return true
        }
    }

1 个答案:

答案 0 :(得分:0)

你只需维护一个索引路径数组,如:

    var arrTodelete = [IndexPath]()

并在cellforIndexPath中进行一些更改:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellNew", for: indexPath)
    ....  
    cell.selectionStyle = .none
    if arrTodelete.contains(indexPath){
        cell.accessoryType = .checkmark
    }else{
        cell.accessoryType = .none
    }..... }

并选择了代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if arrTodelete.contains(indexPath){
        let index = arrTodelete.index(of: indexPath)
        arrTodelete.remove(at: index!)
    }else{
        arrTodelete.append(indexPath)
    }

    tblView.beginUpdates()
    tblView.reloadRows(at: [indexPath], with: .none)
    tblView.endUpdates()
}

最后当你点击删除按钮时:

@IBAction func checkOutPressed(_ sender: Any) {

 for ele in arrTodelete{
        books.remove(at: ele.item)
    }

    tblView.beginUpdates()
    tblView.deleteRows(at: arrTodelete, with: .fade)
    tblView.endUpdates()

    arrTodelete.removeAll()
    tblView.reloadData() }

做这些事情,它会对你起作用..