Add swipe to delete UITableViewCell Add swipe to delete UITableViewCell swift swift

Add swipe to delete UITableViewCell


Add these two functions:

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {    return true}func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {    if (editingStyle == UITableViewCellEditingStyle.Delete) {        // handle delete (by removing the data from your array and updating the tableview)    }}

Swift 3.0:

override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {    return true}override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {    if (editingStyle == UITableViewCellEditingStyle.delete) {        // handle delete (by removing the data from your array and updating the tableview)    }}

Swift 4.2

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {    return true}func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {    if (editingStyle == .delete) {        // handle delete (by removing the data from your array and updating the tableview)    }}


You can try this:

func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {    return true}func tableView(tableView: UITableView!, commitEditingStyle editingStyle:   UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {    if (editingStyle == UITableViewCellEditingStyle.Delete) {        NamesTable.beginUpdates()        Names.removeAtIndex(indexPath!.row)        NamesTable.deleteRowsAtIndexPaths([indexPath], withRowAnimation: nil)        NamesTable.endUpdates()    }}

If you're supporting iOS11+ please see the discussion:

Use the performBatchUpdates(_:completion:) method instead of this one whenever possible.


Another way that allows you to change the text of "Delete" and add more buttons when sliding a cell is to use editActionsForRowAtIndexPath.

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {    return true}func tableView(tableView: (UITableView!), commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: (NSIndexPath!)) {}func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {    var deleteAction = UITableViewRowAction(style: .Default, title: "Delete") {action in       //handle delete    }    var editAction = UITableViewRowAction(style: .Normal, title: "Edit") {action in        //handle edit    }    return [deleteAction, editAction]}

canEditRowAtIndexPath and commitEditingStyle are still required, but you can leave commitEditingStyle empty since deletion is handled in editActionsForRowAtIndexPath.