迅速删除TableViewCell之前弹出警报用户?

时间:2019-05-16 21:11:20

标签: ios swift uitableview

标题基本上是这样说的;感到惊讶的是我在堆栈概述中找不到任何内容,但没有一个帮助我或处于目标C

我有一个带有项目列表的表格视图和一个允许用户删除行的编辑按钮(也可以“滑动以删除”)。基本上,我想弹出一个警报,提示“您确定要删除(行名)”,其中行名是要删除的行的名称。从我发现/尝试过的内容中,我可以得到弹出窗口,但每次您按下编辑按钮或向右滑动时,它都会显示出来。我只希望在用户按下“删除”时显示弹出窗口。

显然,如果从弹出菜单中按“取消”,则应取消;如果他们按“删除”,则应删除

您通常如何做到这一点?

对不起,我有点菜了

1 个答案:

答案 0 :(得分:1)

您所要做的就是在按下按钮并设置每个动作时显示警报。

以此替换您的commit editingStyle委托方法,并将data变量替换为您的数据数组:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        presentDeletionFailsafe(indexPath: indexPath)
    }
}

func presentDeletionFailsafe(indexPath: IndexPath) {
    let alert = UIAlertController(title: nil, message: "Are you sure you'd like to delete this cell", preferredStyle: .alert)

    // yes action
    let yesAction = UIAlertAction(title: "Yes", style: .default) { _ in
        // replace data variable with your own data array
        self.data.remove(at: indexPath.row)
        self.tableView.deleteRows(at: [indexPath], with: .fade)
    }

    alert.addAction(yesAction)

    // cancel action
    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

    present(alert, animated: true, completion: nil)
}

编辑

示例:

private let reuseId = "cellReuseId"

class SlideToDeleteViewController : UIViewController {
    lazy var tableView = createTableView()

    func createTableView() -> UITableView {
        let tableView = UITableView()
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: reuseId)
        tableView.dataSource = self
        tableView.delegate = self
        return tableView
    }

    var data = ["one", "two", "three", "four"]

    override func loadView() {
        self.view = tableView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

extension SlideToDeleteViewController: UITableViewDataSource, UITableViewDelegate {

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

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

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            presentDeletionFailsafe(indexPath: indexPath)
        }
    }

    func presentDeletionFailsafe(indexPath: IndexPath) {
        let alert = UIAlertController(title: nil, message: "Are you sure you'd like to delete this cell", preferredStyle: .alert)

        // yes action
        let yesAction = UIAlertAction(title: "Yes", style: .default) { _ in
            // put code to remove tableView cell here
            self.data.remove(at: indexPath.row)
            self.tableView.deleteRows(at: [indexPath], with: .fade)
        }

        alert.addAction(yesAction)

        // cancel action
        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

        present(alert, animated: true, completion: nil)
    }
}