Search code examples
iphoneuitablevieweditmode

UITableView in edit mode - 'Edit' button doesn't change status


I have a UIViewController class, with a tableView. In viewDidLoad:

UIBarButtonItem *editIcon = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem: UIBarButtonSystemItemEdit
                    target:self
                    action:@selector(toggleEditMode)] autorelease];

In te method 'toggleEditMode':

-(void)toggleEditMode{
if(self.theTable.editing) {
    [theTable setEditing:NO animated:YES];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain];
}
else if ([callsArray count]!=0){
    [theTable setEditing:YES animated:YES];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];
}

}

The problem is that the Edit button does not change do 'DONE'. What's missing? I have all the methods declared:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

Thanks,

RL


Solution

  • Why not use -editButtonItem of UIViewController directly ? And override -setEditing:animated: method.

    // Assign the system's edit button, 
    // it will change style when different edit status.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    
    // The editButtonItem will invoke this method.
    - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
        [super setEditing:editing animated:animated];
    
        if (editing) {
             // Execute tasks for editing status
        } else {
             // Execute tasks for non-editing status.
        }
    }