Me gustaría personalizar tanto el fondo como el color del borde de un UITableView de estilo agrupado.
Pude personalizar el color de fondo usando lo siguiente:
tableView.contentView.backgroundColor = [UIColor greenColor];
Pero el color del borde sigue siendo algo que no sé cómo cambiar.
¿Cómo personalizo estos dos aspectos de la vista de tabla de estilo agrupado?
Respuestas:
ACTUALIZACIÓN: En iPhone OS 3.0 y posteriores,
UITableViewCell
ahora tiene unabackgroundColor
propiedad que lo hace realmente fácil (especialmente en combinación con el[UIColor colorWithPatternImage:]
inicializador). Pero dejaré la versión 2.0 de la respuesta aquí para cualquiera que la necesite ...Es más difícil de lo que realmente debería ser. Así es como hice esto cuando tuve que hacerlo:
Debe establecer la propiedad backgroundView de UITableViewCell en una UIView personalizada que dibuje el borde y el fondo en los colores apropiados. Esta vista debe poder dibujar los bordes en 4 modos diferentes, redondeados en la parte superior para la primera celda de una sección, redondeados en la parte inferior para la última celda de una sección, sin esquinas redondeadas para las celdas en el medio de una sección y redondeado en las 4 esquinas para las secciones que contienen una celda.
Desafortunadamente, no pude averiguar cómo configurar este modo automáticamente, así que tuve que configurarlo en el método -cellForRowAtIndexPath de UITableViewDataSource.
Es un PITA real, pero he confirmado con los ingenieros de Apple que actualmente es la única forma.
Actualizar Aquí está el código para esa vista bg personalizada. Hay un error de dibujo que hace que las esquinas redondeadas parezcan un poco raras, pero cambiamos a un diseño diferente y eliminamos los fondos personalizados antes de que tuviera la oportunidad de solucionarlo. Aún así, probablemente esto te resulte muy útil:
fuente
Sé que las respuestas están relacionadas con el cambio de celdas de la tabla agrupadas, pero en caso de que alguien quiera cambiar también el color de fondo de la vista de tabla:
No solo necesitas configurar:
También necesita cambiar o deshacerse de la vista de fondo:
fuente
En primer lugar, gracias por este código. He realizado algunos cambios de dibujo en esta función para eliminar el problema de la esquina del dibujo.
fuente
Gracias por el código, es justo lo que estaba buscando. También agregué el siguiente código al código de Vimal, para implementar el caso de una celda CustomCellBackgroundViewPositionSingle. (Las cuatro esquinas están redondeadas).
fuente
Una cosa que encontré con el código CustomCellBackgroundView anterior de Mike Akers que podría ser útil para otros:
cell.backgroundView
no se vuelve a dibujar automáticamente cuando las celdas se reutilizan, y los cambios en la posición var de backgroundView no afectan las celdas reutilizadas. Eso significa que las tablas largas se habrán dibujado incorrectamentecell.backgroundViews
dadas sus posiciones.Para solucionar este problema sin tener que crear un nuevo backgroundView cada vez que se muestra una fila, llame
[cell.backgroundView setNeedsDisplay]
al final de su-[UITableViewController tableView:cellForRowAtIndexPath:]
. O para una solución más reutilizable, anule el configurador de posición de CustomCellBackgroundView para incluir un[self setNeedsDisplay]
.fuente
Gracias por esta publicación súper útil. En caso de que alguien por ahí (¡como yo!) Quiera tener un fondo de celda completamente vacío en lugar de personalizarlo a través de imágenes / texto / otro contenido en IB y no pueda averiguar cómo diablos deshacerse del borde / relleno tonto / background a pesar de que lo configuró para borrar en IB ... ¡aquí está el código que usé que hizo el truco!
¡Ojalá ayude a alguien más! Parece funcionar a las mil maravillas.
fuente
cell.backgroundView
.Muchas gracias a todos los que publicaron su código. Esto es muy útil.
Derivé una solución similar para cambiar el color de resaltado de las celdas de vista de tabla agrupadas. Básicamente, el selectedBackgroundView de UITableViewCell (no el backgroundView). Que incluso en iPhone OS 3.0 todavía necesita esta solución PITA, por lo que puedo decir ...
El siguiente código tiene los cambios para representar el resaltado con un degradado en lugar de un color sólido. También se elimina el renderizado del borde. Disfrutar.
fuente
Puede personalizar el color del borde configurando
fuente
Para cambiar el color del borde de la vista de tabla:
En.h:
En m:
fuente
Esta tarea se puede realizar fácilmente usando PrettyKit agregando alrededor de 5 líneas de código. Si usas
nib
archivos ostoryboard
, tampoco olvides aplicar este pequeño truco . Cuando usa este enfoque, debe subclasificar su celda dePrettyTableViewCell
:Este es un ejemplo de mi
cellForRowAtIndexPath
:fuente
He tenido problemas con esto y probé muchas combinaciones de cosas, ya que noté que para algunas celdas funcionaba bien pero no para otras.
Extrañamente, descubrí que es posible configurar cell.backgroundColor en lightGrayColor y todo funciona perfectamente, pero blueColor me causó problemas al no actualizar los bordes exteriores.
A menos que sea realmente importante usar verde, tal vez desee probar esto. Puede ser que esta sea una función para que las personas usen solo colores grises cuando indican que una celda está seleccionada.
fuente