Swift:如何使用“编辑”按钮删除并停用滑动以删除?

时间:2015-04-16 10:58:32

标签: uitableview swift

我在导航栏中添加了带有IBAction的编辑按钮:

@IBOutlet weak var editButton: UIBarButtonItem!

@IBAction func doEdit(sender: AnyObject) {

    if (self.tableView.editing) {
        editButton.title = "Edit"
        self.tableView.setEditing(false, animated: true)
    } else {
        editButton.title = "Done"
        self.tableView.setEditing(true, animated: true)
    }
}

用于去除细胞

    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if (editingStyle == UITableViewCellEditingStyle.Delete) {
        arr.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    }
}

不幸的是,这也会激活滑动删除。如何在不实施swip删除的情况下删除单元格?

3 个答案:

答案 0 :(得分:5)

解决方案(来自this answer),翻译成Swift:

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    if (self.tableView.editing) {
            return UITableViewCellEditingStyle.Delete;
    }

    return UITableViewCellEditingStyle.None;
}

答案 1 :(得分:4)

这是工作代码:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if (editingStyle == UITableViewCellEditingStyle.Delete) {
        arr.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    }
}

func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    if (self.tableView.editing) {
        return UITableViewCellEditingStyle.Delete
    }
    return UITableViewCellEditingStyle.None
}

答案 2 :(得分:2)

Swift-4

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let delete = UITableViewRowAction(style: .destructive, title: "delete") { (action, indexPath) in
        // delete item at indexPath

    }

    let action2 = UITableViewRowAction(style: .normal, title: "action2") { (action, indexPath) in
        // action2 item at indexPath
    }

    return [delete, action2]
}