objective c - source - Deshabilitar el gesto de deslizar para eliminar en UITableView
uitableviewcell swift 3 (4)
¿Es posible deshabilitar el gesto ''deslizar para eliminar'' para una fila / celda en un tableView? Si es así, como lo haces? La celda aún debe ser editable en el modo EDITAR, pero el gesto de deslizar para eliminar debe estar deshabilitado.
Esto es lo que hay que hacer:
- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
// Detemine if it''s in editing mode
if (self.tableView.editing) {
return UITableViewCellEditingStyleDelete;
}
return UITableViewCellEditingStyleNone;
}
Aún necesita tableView:commitEditingStyle:forRowAtIndexPath:
para animar la eliminación.
Esta es una solución mucho más limpia que la solución de iBrad Apps, ya que puede usar el valor predeterminado self.editButtonItem
lugar de un botón personalizado.
Heres una versión rápida:
override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
if tableView.editing {
return UITableViewCellEditingStyle.Delete
}
return UITableViewCellEditingStyle.None
}
Sí. El siguiente código lo deshabilitará.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
Respuesta a tu comentario:
Edit2 : Mi código a continuación funcionará mejor con un botón personalizado. Si desea el botón predeterminado, vaya al enlace que @dasblinkenlight publicó.
Así que más o menos haz un botón donde quieras que se muestren los botones de edición y luego llama a este método.
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.tableview setEditing:editing animated:animated];
}
Si no quieres permitir que ciertas celdas sean barridas y eliminadas, aquí hay una solución:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == yourCellIndex) {
return NO;
}
return YES;
}
Tampoco olvides tener esto implementado para que funcione:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// do something when deleted
}
}