2011-04-28 14 views
5

UITableViewCell modifica el contenido de su jerarquía contentView cuando la celda está resaltada (el usuario toca la celda).Aclare el comportamiento no documentado de UITableViewCell en el evento resaltado

dos ejemplos que he encontrado hasta la fecha:

  • poner un UIView en contentView de una celda con un color de fondo. El color de fondo de UIView se elimina cuando la celda de la tabla se resalta (aparentemente está configurada para tener un fondo claro).
  • Ponga un UIButton en contentView. Cuando la celda está resaltada, el botón también se fuerza en el estado resaltado.

Es como si hay alguna lógica en la celda UITableView que inspecciona todos los puntos de vista de la jerarquía de la célula y se modifica de acuerdo a un conjunto de reglas misteriosos, a continuación, los restaura volver a la normalidad una vez que la célula es un-resaltado.

¿Alguien puede explicar qué y por qué UITableViewCell está modificando (inesperadamente y de manera no documentada) en los contenidos de mis celdas de vista de tabla personalizada?

Gracias!

Respuesta

1

El resaltado de la UITableViewCell se documenta en el Apple docs de la siguiente manera:

El resaltado afecta a la aspecto de las etiquetas, imágenes y fondo. Cuando el estado resaltado de una celda se establece en SÍ, las etiquetas se dibujan en su texto resaltado color (el valor predeterminado es blanco). El valor predeterminado es NO. Si configura el estado resaltado en SÍ a través de esta propiedad , la transición a la nueva apariencia del estado no está animada. Para transiciones de estado resaltado animado , consulte setHighlighted: animado: método.

Tenga en cuenta que para poner de relieve a trabajar correctamente, debe ir a buscar etiquetas de las células utilizando el textLabel y propiedades detailTextLabel y establecer de cada etiqueta highlightedTextColor propiedad; para las imágenes, obtenga la imagen de la celda con la propiedad imageView y establezca la propiedad del elemento UImagemageView.

Esto no menciona UIButtons, pero this post es acerca de cómo prevenir el botón de entrar en el estado de relieve cuando la célula hace.

+2

Gracias, esto es solo una documentación parcial: no se analiza cómo las propiedades arbitrarias de UIView backgroundColor también se cambian para borrar, por lo que definitivamente es una explicación incompleta. Me gustaría obtener todas las cosas que cambia en la respuesta. Sin embargo, la solución a la que se vincula - implementando estados de resaltado/selección personalizados anulando setHighlighted: animated: y setSelected: animated: - me permite evitar por completo los cambios de resaltado mixto/no documentados al no llamar al supermétodo en las anulaciones y haciendo todo yo mismo – Yetanotherjosh

Cuestiones relacionadas