También hay un método -setEditing:animated:
para UITableViewCell.Por lo tanto, si lo anula en una UITableViewCell personalizada y envía el mensaje a super solo si es editable, puede lograr lo que desea.
Para ser más claro. Subclase UITableViewCell y mantener un bool en él, dicen:
@interface CustomTableViewCell : UITableViewCell
{
BOOL cellEditable;
}
@property (readwrite, assign) BOOL cellEditable;
@end
A continuación, en el método de delegado tableview, devolver un objeto de CustomTabeViewCell con la propiedad cellEditable apropiadamente ajustado para la fila (si esa fila se puede editar o no).
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *newCell = [[CustomTableViewCell alloc] init];
if (row_is_editable)
[newCell setCellEditable:YES];
else
[newCell setCellEditable:NO];
return [newCell autorelease];
}
De acuerdo con la documentación de - (void)setEditing:(BOOL)editing animated:(BOOL)animated
método de UITableViewCell -
"Cuando se llama a este método con el valor del conjunto de edición en YES, y el objeto UITableViewCell está configurado para tener controles, la célula muestra una inserción (verde más) o control de eliminación (menos rojo) en el lado izquierdo de cada celda y un control de reordenamiento en el lado derecho. Este método se invoca en cada celda visible cuando se invoca el método setEditing: animado: UITableView. Llamar a este método con la edición establecida en NO, se eliminan los controles de la celda ".
Así que todo lo que tenemos que hacer es anular el -setEditing: animada: método en nuestra CustomTableViewCell y realizar esto:
-(void)setEditing:(BOOL)editing animated:(BOOL)animated
{
if ([self cellEditable])
{
[super setEditing:editing
animated:animated];
}
else
{
[super setEditing:NO
animated:NO];
}
}
y ya está, ahora, cuando se dispara -setEditing:animated:
en su vista de tabla, sólo el las filas cuyas celdas configuradas como cellEditable serán editables.
@Jordan, gracias, esta es la misma idea que tuve, pero crea un molesto parpadeo cuando la mesa entra en modo de edición y no se siente muy natural. Creo que la OP debe implementar el golpe-a-eliminar como Ian Henry sugiere o se adhieren a un enfoque más estándar. – DyingCactus
También podría usar animación, pero estoy de acuerdo. – Jordan
Gracias Jordan, parece que funciona. :) – msk