2012-03-16 12 views
5

UITableView tiene esa animación incorporada en la que, después de reordenar una celda, se coloca suavemente en el espacio libre. ¿Hay algún punto donde acceder a algún tipo de notificación después de que termina la animación? Me gustaría llamar a un método al finalizar. Por el momento estoy usando performSelector:withObject:afterDelay: que funciona bien en este momento, pero me gustaría saber si es posible acceder a la animación completa.
Para reiterar, no estoy hablando de animación personalizada, solo la animación incorporada en UITableView.Notificación completa de animación después de que UITableView se reordena manualmente

He estado buscando y no puedo encontrar una respuesta.

+0

Posible duplicado de: http://stackoverflow.com/questions/7198633/how-can-i-tell-when-a-uitableview-animation-has-finished – fishinear

Respuesta

0

Si tiene acceso a la fuente de datos de la vista de tabla, esto se vuelve realmente fácil. Solo debe establecer una propiedad en las celdas de vista de tabla e implementar un método en la fuente de datos. La propiedad que debe establecer es

tableViewCell.showsReorderControl = YES; 

que probablemente ya haya configurado. Ahora todo lo que tiene que hacer es poner en práctica este método en la fuente de datos:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath; 

Cada vez que el usuario libera la célula se reordena, la vista de tabla deben informar a la fuente de datos para reordenar los datos reales. Todo lo que tienes que hacer es aprovechar todo esto, así:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { 
    [self doMyFavoriteThing]; 
} 

¡Eso es todo! Por supuesto, esto no es estrictamente el final de la animación, pero se trata del mismo evento.

4

Me doy cuenta de que esta pregunta es antigua, pero todavía me tropecé con ella cuando estaba tratando de encontrar una respuesta al mismo problema que tenía @Gobot. Bueno, resulta que hay una solución SIMPLE. Al igual que lo @Mitchell Vanderhoeff indicó, es necesario insertar el método

- (void)tableView:(UITableView *)tableView 
     moveRowAtIndexPath:(NSIndexPath *)fromIndexPath 
     toIndexPath:(NSIndexPath *)toIndexPath { 
     [CATransaction setCompletionBlock:^{ 
      // Completion code here 
     }]; 
} 

en su delegado tableview para obtener notificación del tableview que está a punto de mover una fila. La clave, sin embargo, es el CATransaction setCompletionBlock. Esto le permitirá establecer un bloque de finalización en la transacción de animación implícita que la tabla está haciendo para el movimiento de la fila. Al igual que su nombre lo indica, todo lo que ponga en ese bloque se ejecutará después de que la animación se haya completado.

Deberá incluir el marco QuartzCore si aún no es parte de su proyecto.

Cuestiones relacionadas