Tengo una vista personalizada en una celda de tabla personalizada. Cada vez que se cambia una propiedad específica en la vista personalizada, llamo al [self setNeedsDisplay]
, que vuelve a dibujar la vista en - (void)drawRect:(CGRect)rect
. Esa propiedad se establece en el delegado de la vista de tabla tableView:cellForRowAtIndexPath:
. Pero cuando la vista de tabla es más grande que la pantalla y las celdas deben reutilizarse, no se llama al drawRect
cada vez que se encuentra setNeedsDisplay
. Especialmente cuando muevo rápidamente la mesa. El desplazamiento lento funciona bien. Esto lleva a que la información en la primera y última celda a menudo sea incorrecta.setNeedsDisplay no siempre llama a drawRect
En el registro Veo que normalmente, para cada llamada a setNeedsDisplay
hay una llamada a drawRect
, pero cuando me desplazo rápidamente la vista de tabla hay más llamadas a setNeedsDisplay
que drawRect
. Seguramente debería haber una relación de uno a uno aquí.
Uso la misma vista personalizada en una UIView normal, y se vuelve a dibujar perfectamente cada vez que llamo al setNeedsDisplay
. El problema parece estar aislado de las vistas de tabla y de la reutilización de celdas.
¿Alguien sabe lo que está pasando aquí? ¿Hay alguna otra manera de obligar a la vista personalizada a redibujarse?
No estoy redibujando la tabla. Solo la vista personalizada. – kareman
reloadData llama a setNeedsDisplay en el momento adecuado. Usted parece estar luchando contra el marco. Deje que el marco decida cuáles actualizar e implemente tableView: cellForRowAtIndexPath: – amattn
reloadData hace que se destruyan todas las celdas de la tabla, que se vuelva a consultar el origen de datos y que se recreen las celdas visibles. Eso es mucho más de lo necesario para actualizar una sola célula. – rpetrich