Me gustaría personalizar el fondo (y quizás el borde también) de todos los UITableViewCells dentro de mi UITableView. Hasta ahora no he podido personalizar estas cosas, así que tengo un montón de celdas de fondo blanco, que es el valor predeterminado.
¿Hay alguna manera de hacer esto con el SDK de iPhone?
UITableViewCellAccessoryCheckmark
, por ejemplo? Gracias.cell.textLabel.backgroundColor = [UIColor clearColor];
Esta es la forma más eficiente que he encontrado para resolver este problema, use el método delegado willDisplayCell (esto también se encarga del color blanco para el fondo de la etiqueta de texto al usar cell.textLabel.text y / o cell.detailTextLabel.text ):
Cuando se llama a este método delegado, el color de la celda se controla a través de la celda en lugar de la vista de tabla, como cuando usa:
Entonces, dentro del cuerpo del método de delegado de celda, agregue el siguiente código para alternar los colores de las celdas o simplemente use la llamada a la función para hacer que todas las celdas de la tabla tengan el mismo color.
Esta solución funcionó bien en mi circunstancia ...
fuente
cell.backgroundColor = UIColor.clearColor
Esto es realmente simple, ya que OS 3.0 simplemente establece el color de fondo de la celda en el método willDisplayCell. No debe establecer el color en cellForRowAtIndexPath.
Esto funciona tanto para el estilo plano como para el agrupado:
Código:
PD: Aquí el extracto de documentación para willDisplayCell:
He encontrado esta información en esta publicación de colionel . ¡Gracias a el!
fuente
El mejor enfoque que he encontrado hasta ahora es establecer una vista de fondo de la celda y borrar el fondo de las subvistas de la celda. Por supuesto, esto se ve bien en tablas con estilo indexado solamente, sin importar con o sin accesorios.
Aquí hay una muestra en la que el fondo de la celda está pavimentado en amarillo:
fuente
Simplemente ponga esto en su archivo de clase de delegado UITableView (.m):
fuente
Estoy de acuerdo con Seba, traté de configurar mi color de fila alternativo en el método de delegado rowForIndexPath pero estaba obteniendo resultados inconsistentes entre 3.2 y 4.2. Lo siguiente funcionó muy bien para mí.
fuente
Después de probar todas las soluciones diferentes, el siguiente método es el más elegante. Cambie el color en el siguiente método delegado:
fuente
vlado.grigorov tiene algunos buenos consejos: la mejor manera es crear una vista de fondo y darle un color, configurando todo lo demás en clearColor. Además, creo que esa es la única forma de borrar correctamente el color (pruebe su muestra, pero establezca 'clearColor' en lugar de 'yellowColor'), que es lo que estaba tratando de hacer.
fuente
Personalizar el fondo de una celda de vista de tabla finalmente se convierte en un enfoque de "todo o nada". Es muy difícil cambiar el color o la imagen utilizada para el fondo de una celda de contenido de una manera que no se vea extraña.
La razón es que la celda realmente abarca el ancho de la vista. Las esquinas redondeadas son solo parte de su estilo de dibujo y la vista de contenido se encuentra en esta área.
Si cambia el color de la celda de contenido, terminará con bits blancos visibles en las esquinas. Si cambia el color de toda la celda, tendrá un bloque de color que abarcará el ancho de la vista.
Definitivamente puede personalizar una celda, pero no es tan fácil como podría pensar al principio.
fuente
Cree una vista y configúrela como vista de fondo de la celda.
fuente
Para ampliar la respuesta de N.Berendt: si desea establecer el color de la celda en función de algún estado en el objeto de datos de celda real, en el momento en que está configurando el resto de la información para la celda de la tabla, que generalmente es cuando está en el El método cellForRowAtIndexPath, puede hacerlo anulando el método willDisplayCell para establecer el color de fondo de la celda desde el color de fondo de la vista de contenido; esto evita el problema de que los fondos del botón de divulgación, etc., no sean correctos, pero aún le permiten controlar el color en el método cellForRowAtIndexPath donde está haciendo toda la personalización de su otra celda.
Entonces: si agrega este método a su delegado de vista de tabla:
Luego, en su método cellForRowAtIndexPath puede hacer:
Esto ahorra tener que recuperar sus objetos de datos nuevamente en el método willDisplayCell y también ahorra tener dos lugares donde se personaliza / personaliza la celda de la tabla: toda la personalización puede ir en el método cellForRowAtIndexPath.
fuente
Cree una imagen para usar como fondo con Photoshop o gimp y asígnele el nombre myimage. Luego, agregue este método a su clase tableViewController:
Esto también funcionará si ha configurado UITableView como personalizado en el inspector de atributos.
fuente
Mi solución es agregar el siguiente código al evento cellForRowAtIndexPath:
Funciona bajo cualquier circunstancia, incluso con botones de divulgación, y es mejor para su lógica actuar sobre el estado del color de las celdas en cellForRowAtIndexPath que en el evento cellWillShow, creo.
fuente
Subclase UITableViewCell y agregue esto en la implementación:
fuente
fuente
Esto funcionará en el último Xcode.
fuente
Prueba esto:
fuente