2011-06-08 13 views
8

¿Cómo puedo hacer que se tomen medidas al completar una animación de UITableview?IOS UITableview cómo tomar acción después de completar las animaciones de tabla

Estoy intentando reducir una célula UITableview y eliminar una subvista de la celda que no está visible después de la contracción. Para reducir el tamaño de la celda, invoco [tableview beginUpdates] y [tableview endUpdates], y modifico el alto de la celda como lo devuelve el método de fuente de datos heheForRowAtIndexPath de UITableview.

El desafío es que necesito que la vista de tabla termine de contraerse para que la subvista no esté a la vista antes de poder eliminar la subvista. si coloco el código para eliminar la subvista de la celda justo después (o antes o entre) de llamar a [tableview endUpdates], la subvista se elimina demasiado pronto (no espera la animación) y se ve raro.

Mi pensamiento es que me gustaría ser capaz de configurar una devolución de llamada que se ejecuta tras la finalización de la animación, y quitar la vista secundaria de la devolución de llamada

+3

lo mejor que he encontrado hasta ahora está funcionando performSelector en un corto tiempo de retraso: [auto performSelector: @selector (removeSubmenuViewFromCellView) withObject: cero afterDelay: 0,3]; – kris

+1

Hecho. Gracias por la sugerencia – kris

Respuesta

19

¿Qué tal esto?

[CATransaction begin]; 

[CATransaction setCompletionBlock:^{ 
    // animation has finished 
}]; 

[tableView beginUpdates]; 
// shrink the cells 
[tableView endUpdates]; 

[CATransaction commit]; 
+0

Gracias por la sugerencia de Rudolf. No estoy seguro de cuándo voy a tener la oportunidad de revisar esto, ya que ha pasado un tiempo desde que trabajé en esta cuestión. Sin embargo, si alguien más puede comentar que esta es una buena solución, o la probaré, la marcaré como la respuesta. Mientras tanto, +1. – kris

+0

Esta es una buena solución. Solo funcionó para mí, donde necesitaba código para ejecutar solo después de que una fila de la tabla se hubiera animado. – Andrew

+2

Buena solución, esta respuesta debe ser aceptada. – Bringo

-4

tratar de usar la clase NSNotifications. Publique notificaciones cuando algo esté a punto de suceder y más tarde después de que algo haya sucedido. Puede usar un bool en el mismo método de notificación para alternar entre 'sobre pasar' y 'ha sucedido'.

+0

(perdón si este comentario es un duplicado) Entiendo que la única notificación de UITableview que existe no está relacionada con esto, por lo que registrarse no sería de ayuda. En cuanto a la creación de la notificación yo mismo, me gustaría que la notificación se publique justo después de que la vista de tabla termine su animación, pero al igual que el problema original, no sé de qué forma se puede ejecutar mi código (para publicar una notificación o de lo contrario) en ese punto. – kris

+0

Publicar una notificación es muy simple. Solo revisa los documentos de Apple para el mismo. Se proporciona una explicación clara y precisa con el ejemplo. Todo lo mejor con tu tarea. – SeriousSam

+0

Solo digo que las notificaciones no serían útiles en esta situación :) ¡Gracias por todos los comentarios! – kris

Cuestiones relacionadas