2009-06-04 18 views
8

Tengo una UITableView con una UITableViewCell personalizada. En cellForRowAtIndexPath, asigno una fuente a una etiqueta en cada celda, ya que el usuario puede cambiar el tamaño de la fuente en cualquier momento. Para cambiar el tamaño de la fuente, el usuario hace clic en un botón debajo de la vista de tabla, que disloca otra vista con configuraciones. Una vez que hayan elegido un tamaño de letra y hagan clic en "done", esa vista desaparecerá y la vista de tabla aparecerá nuevamente. Despliego una celda por área de visualización. Entonces, el usuario no ve el cambio de fuente hasta que se desplaza a la siguiente celda. La celda actual es la que me gustaría actualizar.Cómo refrescar UITableViewCell?

He intentado reloadData desde la pantalla de configuración pero eso no funcionó. La vista de tabla es un UITableViewController pero viewWillAppear nunca se dispara una vez que la pantalla de configuración desaparece. Intenté hacer que la celda personalizada fuera una propiedad de la vista de tabla para que se pueda acceder desde la vista de configuración, luego se llama a setNeedsDisplay y setNeedsLayout. Esos tampoco funcionaron. ¿Alguna sugerencia?

Respuesta

5

Para las células que todavía están allí, debe actualizar la fuente de la etiqueta. Necesitará una forma de acceder a la etiqueta personalizada en su celda personalizada.

Después de cambiar el tamaño de la fuente hacer algo como:

for (MyCell* cell in [theTableView visibleCells]) { 
    [cell.myLabel.font = newFont]; 
} 
+0

Probé el código en la vista de configuración pero todavía no hay cambios en la celda actual una vez que se muestra la tabla. Si todo lo que hago es llamar a reloadData en la vista de tabla desde la vista de configuración, funciona bien. Sin embargo, parece una forma muy costosa y exagerada de hacerlo. – 4thSpace

+0

Edité mi respuesta después de comprender mejor el problema. –

+0

¡Muchas gracias! – Luda

0

Tengo curiosidad, ¿cómo se visualiza la pantalla de configuración? viewWillAppear se debe llamar en circunstancias normales al regresar. Cómo se utiliza

[self presentModelViewController:animated:] 

o

[self.navigationController pushViewController:animated:] 

Estos deben tanto trabajo. Si, por otro lado, solo está agregando la vista de configuración como una subvista de la ventana o vista actual o algo así, al quitarla no se llamará al viewWillAppear en el controlador de vista de tabla.

Así que si no estás usando uno de esos dos métodos, hazlo. Si ya lo eres, configurar la fuente de la celda es tan simple como obtener la celda y configurar su fuente. Si está utilizando un estándar UITableViewCell, que se han hecho con

cell.font = newFont; 

Si estás usando una subclase personalizada, que, obviamente, no se puede decir exactamente cómo se tiene que trabajar, pero la forma Nikolai lo tiene es correcta .

+0

Estoy usando presentModalViewController. La solución a continuación funcionó bien. – 4thSpace

12

En su UITableViewCell personalizado, llame al [self setNeedsLayout]; y debe repintar su celda en el siguiente ciclo. Lo uso para la carga de imágenes asíncrona ya que estoy extrayendo la imagen de la Web y funciona bien.

+0

Esto funcionó para mí, gracias. Tengo algo de KVO en donde realmente preferiría volver a cargar solo una celda, así que esto funciona bien. – Sam

Cuestiones relacionadas