Swift 4-UITableViewController隐藏删除按钮editingStyleForRowAt .delete

时间:2019-05-14 02:45:50

标签: ios swift uitableview

我有一个表视图控制器,我希望用户能够删除一个项目,所以我实现了这一点:

 override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    return .delete
}

override func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
    return false
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if (editingStyle == .delete) {
        self.array.remove(at: indexPath.row)
        tableView.reloadData()
    }
}

我的问题是,如何隐藏删除按钮,仅在用户滑动行时显示它?

这是它的外观,是否可以启用排序?

enter image description here

1 个答案:

答案 0 :(得分:0)

尝试使用此功能代替您尝试过的三个功能:

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

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
        self.array.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .automatic)
    }

    return [deleteAction]
}

编辑

看到您的屏幕截图后,我相信这就是您要实现的目标。您试图在按下editButton时启用删除功能,然后出现删除图标。如果是这样,请尝试以下代码。

class TableViewController: UITableViewController {
    var array = [1,2,3]

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
         navigationItem.rightBarButtonItem = editButtonItem
    }

    override func setEditing(_ editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)
        tableView.setEditing(editing, animated: true)
    }

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

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

    override func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
        return false
    }

    override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
        return .delete
    }

    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        //deleting logic
    }
}

否则,您可以考虑仅实现一张幻灯片以删除动画,并且代码是在 EDIT 之前的代码。