How to enable swipe to delete cell in a TableView?
I have a UIViewController
that implements TableViews delegate and datasource protocols.
Now I want to add "swipe to delete" gesture to cells.
How should I go about it.
I have given a blank implementation of commitEditingStyle
method and also set the Editing property to YES.
Still the swipe feature is not coming .
Now Do I need to separately add UISwipeGesture
to each cell ?
Or am I missing something ?
Solution 1:
As Dan has commented above, you need to implement the following table view delegate methods:
tableView:canEditRowAtIndexPath:
tableView:commitEditingStyle:forRowAtIndexPath:
Note: I have tried this in iOS 6 and iOS 7.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return YES - we will be able to delete all rows
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Perform the real delete action here. Note: you may need to check editing style
// if you do not perform delete only.
NSLog(@"Deleted row.");
}
Solution 2:
You don't have to set editing:YES
if you need to show Delete button on cell swipe. You have to implement tableView:canEditRowAtIndexPath:
and return YES from there for rows you need to edit/delete. This is not necessary when your tableView's dataSource is a subclass of UITableViewContoller - this method, if not overridden, returns YES by default. In all other cases you have to implement it.
EDIT: Together we have found the problem - tableView:editingStyleForRowAtIndexPath:
returned UITableViewCellEditingStyleNone
if table wasn't in editing mode.