El button Borrar de UITableViewCell no desaparece

Estoy usando un UISegmentedControl para cambiar una UITableView entre dos sets de datos (creo favoritos y recientes). Al tocar el control segmentado se recarga la vista de tabla con el set de datos diferente.

 [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:anim]; 

Cuando el usuario pulsa para eliminar una fila, funciona bien. SIN EMBARGO cuando el usuario cambia los sets de datos a través del control segmentado, la CÉLULA ELIMINADA se reutiliza sin alterar su apariencia (es decir, el button rojo 'DELETE' sigue ahí y el contenido de la fila no se ve por ninguna parte). Este parece ser el problema opuesto que la mayoría de las personas está viendo, que es el button de eliminar que no aparece.

Este es el código de eliminación:

 - (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleDelete; } - (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { if ([self.current isEqualTo:self.favorites]) { Favorite *fav = self.favorites[indexPath.row]; NSMutableArray *mut = [self.favorites mutableCopy]; [mut removeObjectAtIndex:indexPath.row]; self.favorites = mut; self.current = self.favorites; [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } } } 

La vista de tabla está configurada para seleccionar una sola, y self.tableView.editing == NO . También he intentado usar [self.tableView reloadData] y eliminar / insert la diferencia en filas de un set de datos al siguiente. Ninguno de los dos funciona.

La UITableViewCell que estoy usando no proporciona backgroundView ni selectedBackgroundView


[EDITAR]

Se modificó el valor del control segmentado:

 - (IBAction)modeChanged:(id)sender { if (self.listMode.selectedSegmentIndex == 1) { self.current = self.favorites; } else { self.current = self.recents; } // Tryin this: [self.tableView reloadData]; // Tried this: // [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade]; } // Only 1 Section per table - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; { return [self.current count]; } 

Me encontré con lo mismo: para "eliminar" un UITableViewCell personalizado, lo estaba eliminando de la tabla y colocándolo en otra list, que el usuario podría mostrar en una vista modal cuando tienen arrepentimientos y desean volver a colocarlo. En iOS7 (pero no en iOS6), las celdas tan movidas tenían todavía el gran button "ELIMINAR" en ellos, a pesar de llamar a setEditing: NO, y así sucesivamente. (Y además, el rest del contenido de la celda no se dibujó en absoluto, aunque inspeccionar las celdas en el depurador mostró que todos los subpaneles seguían allí).

A diferencia de Stephen arriba, no había anulado prepareForReuse, así que ese no era el problema. Pero estaba relacionado: en mi caso, las celdas no se crearon con un identificador de reutilización:

 self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 

Y según los documentos, "Si el object de celda no tiene un identificador de reutilización asociado, este método no se llama". Pero al parecer, en iOS7 al less, debería serlo.

Entonces la solución, en mi caso, fue llamar explícitamente a este [cell prepareForReuse] en cada celda cuando lo cargué en la nueva tabla.

Oh por el amor de …

No llamaba [super prepareForReuse]; en mi subclass UITableViewCell .

UGH