2012-05-03 13 views
5

todos sabemos que la celda en uitableview puede ser resued, pero estoy viendo algunos resultados raros. soy crear una celda personalizada, cada celda tiene 4 columnas, cada columna tiene una imagen por lo que el formato es así | img | img | img | img | después de devolver la celda, configuro cada celda, un ejemplo sería configurar la primera columna en la imagen 1, luego la segunda columna en otra imagenios uitableview uitable reutilización de la celda tiene datos viejos

ahora solo suponiendo que solo puedo mostrar dos filas a la vez en la tabla vista :

|a0|a1|a2 |a3 | 
|b4|b5|b6 |b7 | 
------cell c not visible to user------ 
|c8|c9|c10|c11| 

como usuario se desplaza hacia abajo, columna 'a' (a0-a3) anterior, se convertirán invisible, y en la medida sé que célula se vuelve invisible será reutilizado para la columna c

el ejemplo anterior funciona bien, si puedo ocupar completamente cada celda/fila, es decir, tengo un total de 12 imágenes.

pero si tengo que decir 10 imágenes (última fila se llena de sólo 2, y los otros dos están vacías, al igual como lo siguiente:

|a0|a1|a2 |a3 | 
|b4|b5|b6 |b7 | 
------row/cell 'c' not visible to user------ 
|c8|c9|empty|empty| 

sin embargo, surge un problema, cuando me desplazo hasta ver células/fila 'c' tengo el siguiente cuadro:

|a0|a1|a2 |a3 | 
------row/cell 'a' not visible to user------ 
|b4|b5|b6 |b7 | 
|c8|c9|a2|a3| 

aviso de que las dos últimas columnas de la fila/célula de C debe estar vacío, pero está mostrando A2 y A3 en lugar

¿cómo puedo solucionar esto? Estoy pensando en una forma manual de hacerlo, es decir, verificando si debo eliminar las vistas innecesarias, etc. al reutilizar, pero podría ser más complicado. ¿Hay una manera más sistemática de hacerlo que sea más fácil y más clara?

¿Hay alguna manera en que podamos pedirle a la celda devuelta que olvide su contenido, o tengo que hacer esto yo mismo?

gracias

Respuesta

7

Tuve un problema similar recientemente. Alterar prepareForReuse después de la subclase, la celda de la vista de tabla lo arregló. Obtuve la respuesta de here

+0

Disculpe a Necro, pregunta de seguimiento al autor original o a la comunidad: leyendo la documentación del desarrollador de Apple en https://developer.apple.com/documentation/uikit/uitableviewcell/1623223-prepareforreuse dice que no tratar con el material relacionado con el contenido en prepareForReuse, sino con cellForRowAt. ¿Alguien tiene alguna explicación sobre por qué la respuesta aceptada entra en conflicto con la documentación oficial? –

9

usted tiene que "hágalo usted mismo". Siempre que se reutilice una UITableViewCell, conserva sus contenidos anteriores. Si desea que se restablezca/borre, debe hacerlo manualmente.

En su personalizado UITableViewCell, puede anular prepareForReuse y restablecer el contenido que desee o hacerlo al configurar el nuevo contenido.

En su caso, el establecimiento de la propiedad image de UIImageView en nil en las cuatro columnas debería funcionar.

Cuestiones relacionadas