2008-12-11 19 views
13

Tengo curiosidad si es posible interceptar los métodos predeterminados del modo 'Editar' en una UITableView. Normalmente, obtienes un botón de 'eliminar' sin cargo si deslizas lateralmente una UITableViewCell que tiene métodos de delegado asociados. Me gustaría cambiar la eliminación a algún otro selector arbitrario. En lugar de eliminar la celda, me gustaría ejecutar un diálogo de alerta hello mundo. ¿Hay algo en esta medida posible?UITableView, interceptando el modo de edición

Respuesta

3

Existe una propiedad en UITableViewCell llamada editAction que está documentada como que le permite cambiar la acción utilizada para la inserción o eliminación en celdas individuales (también utiliza la propiedad de la celda target). No lo he probado, pero parece que podría hacer lo que quieras.

+3

Esta característica ha quedado obsoleta a partir de iOS 3.0. –

0

Implementaría una subclase de UITableViewCell y manejaría eventos táctiles allí. Es probable que tenga que hacer todo el material de animación usted mismo, pero creo que es probablemente la solución más fácil. No hay un método "Compatible" para cambiar el botón Eliminar, no creo

21

La edición se implementa como un método en el objeto delegado de UITableView. En el controlador de mesa, tiene todo lo de control activa la llamada edición de este:

[tableView setEditing: YES animated: YES]; 

A continuación, asegúrese de que su objeto delegado implementa esto:

- (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]; 
    } 
} 

... o una acción más estándar podría ser:

[itemList removeObjectAtIndex:indexPath.row]; 
[table deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; 
+1

El problema es qué hacer cuando el usuario hace clic en "cancelar". Lo único que he hecho que parece medio bien es 'reloadRowsAtIndexPaths' para deshacerse del botón Eliminar. –

+1

+1 para mensaje: @ "¿Realmente desea eliminar" George W. Bush "?" ;) – Devarshi

6

@JFMartin y Marco - para reemplazar el botón estándar 'Eliminar', utilice el siguiente método delegado de UITableview

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath 
Cuestiones relacionadas