2009-07-22 16 views
5

Tengo una UITableView y deseo proporcionar la funcionalidad para que el usuario elimine la fila cuando se desliza o mueve el dedo sobre la fila. Conozco el estilo de edición que proporciona un botón rojo circular con el signo -ve en él. Pero cómo implementar el estilo flicking. Vi muchas aplicaciones que lo usaban, por lo que Apple proporciona cualquier delegado incorporado para él o tenemos que escribir nuestro propio controlador para ello.Cómo eliminar una fila de una tabla en iPhone

+0

¿me puede decir el método que ya conoce? porque quiero implementar eso. – rptwsthi

Respuesta

32

Con el fin de conseguir el efecto de golpe es necesario implementar la vista de tabla delegado método

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

, esto proporcionará acceso a la interacción magnética para su eliminación. Por lo general, también proporciono una interacción de edición para las vistas de tabla donde la eliminación es posible ya que la interacción del deslizamiento tiende a estar un poco oculta para los usuarios.

A modo de ejemplo:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView beginUpdates];  
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
    // Do whatever data deletion you need to do... 
    // Delete the row from the data source 
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationTop]; 
    }  
    [tableView endUpdates]; 
} 

Espero que ayude.

+0

no sé cómo agradecerle ... – WaaleedKhan

+1

withRowAnimation: SÍ es incorrecto, debe usar una enumeración, p. withRowAnimation: UITableViewRowAnimationTop – ozba

+0

Considere cambiar '... UITableViewRowAnimationTop];' a '... UITableViewRowAnimationAutomatic];'. Esto se hizo en una edición inválida (debería haber sido un comentario), así que lo revertí. Si esto es correcto, considere actualizar su solución en consecuencia. –

2

Estoy casi seguro de que hay una aplicación de muestra que hace esto. Una respuesta más concreta llegará pronto.

ACTUALIZACIÓN: iPhoneCoreDataRecipes da probablemente exactamente lo que estás buscando.

en el tema, aquí es uno de los métodos más dulce previstos:

// If I want to delete the next 3 cells after the one you click 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSMutableArray* indexPaths = [NSMutableArray array]; 
    for (int i = indexPath.row + 3; i < indexPath.row + 3; i++) 
    { 
    [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 
    } 

    [tableView beginUpdates]; 
    [tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; 
    [tableView endUpdates]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

Creo que hay una manera más fácil de lograr lo que quiere, pero de nuevo esto es bastante sencillo. La única dificultad podría ser eliminarse ... solo tenga cuidado con segfaults.

Cuestiones relacionadas