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
.