13

I'm curious if it's possible to intercept the default methods of 'Edit' mode on a UITableView. Typically you get a free 'delete' button if you side swipe a UITableViewCell that has delegate methods associated with it. I'd like to change the delete to some other, arbitrary selector. Instead of deleting the cell, I'd just like to run a hello world alert dialogue. Is something to this extent possible?

Coocoo4Cocoa
  • 48,756
  • 50
  • 150
  • 175

4 Answers4

21

Editing is implemented as a method on your UITableView’s delegate object. In your table controller, have whatever control activates editing call this:

[tableView setEditing: YES animated: YES];

Then, make sure that your delegate object implements this:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
            UIAlertView *alert = [[UIAlertView alloc] 
                initWithTitle: @"Delete" 
                message: @"Do you really want to delete “George W. Bush”?" 
                delegate: self
                cancelButtonTitle: @"Cancel"
                otherButtonTitles: @"Of course!", nil];
    }
}

…or a more standard action might be:

[itemList removeObjectAtIndex:indexPath.row];
[table deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
Adam Prall
  • 457
  • 5
  • 5
  • 1
    Problem is what to do when the user clicks "cancel." The only thing that I've done that looks half okay is `reloadRowsAtIndexPaths` to get rid of the delete button. – Dan Rosenstark Jul 28 '10 at 02:41
  • 1
    +1 for message:@"Do you really want to delete “George W. Bush”?" ;) – Devarshi Oct 25 '11 at 13:50
6

@JFMartin and Marco - to replace the standard 'Delete' button use the following UITableview delegate method

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
Eimantas
  • 48,927
  • 17
  • 132
  • 168
James
  • 474
  • 4
  • 7
3

There is a property on UITableViewCell called editAction which is documented as letting you change the action used for insertion or deletion on individual cells (it uses the cell's target property too). I haven't tested it, but this sounds like it might do what you want.

Lily Ballard
  • 182,031
  • 33
  • 381
  • 347
0

I would implement a subclass of UITableViewCell and handle touch events in there. You would likely have to do all the animation stuff yourself, but I think it's probably the easiest solution. There's not a "Supported" method for changing the delete button, I don't think

Ed Marty
  • 39,590
  • 19
  • 103
  • 156