Pregunta

En mi aplicación, tengo un UITableViewCell que se utiliza para mostrar una configuración de color de fondo. En el detailTextLabel, se muestra el nombre del color con el conjunto de fondo al color real, por ejemplo, [UIColor cyanColor]. Tenga en cuenta que me he fijado el fondo de la detailTextLabel solamente, no todo el UITableViewCell. Cuando los usuarios golpecito en la célula que se toman a otro UITableView que les permite elegir un color, y cuando regresan a la anterior UITableView la backgroundColor del UILabel se actualizan para el nuevo color.

El problema es que cada vez que vuelvo a la UITableView inicial, backgroundColor del UILabel actualiza momentáneamente y luego vuelve al color inicial. No puedo averiguar por qué se estaría revirtiendo. ¿Alguna sugerencia?

Gracias!

¿Fue útil?

Solución

Algunas propiedades basadas en estado son establecidos por la vista de la tabla; Creo que el color de fondo es uno de ellos. En otras palabras, la vista de tabla está cambiando el color de fondo de detailTextLabel, probablemente como parte de unhighlighting la selección.

Después de la vista de tabla establece las propiedades basadas en el estado, el delegado tabla se da una última oportunidad para actualizar el aspecto de cada célula. Esto se hace en el método tableView:willDisplayCell:forRowAtIndexPath: del delegado. Tal vez si se establece el color de fondo de detailTextLabel en este método el problema desaparecerá.

Otros consejos

Cuando se ejecuta cellForRowAtIndexPath, por lo general crea y devuelve una nueva célula.

A partir de su pregunta, no está claro si se vuelve a crear la célula o no, pero si es así, esto podría explicar el comportamiento que usted describe.

Yes..Maybe no está reutilizando sus células en méthode cellForRowAtIndexPath. Si es así, tratar de volver a utilizar sus células en lugar de crear uno nuevo cada vez.

La forma en que me fijo este era crear una subclase UILabel llamados HighlightedLabel que tiene la siguiente initialiser:

- (id)initWithHighlightedBackgroundColor:(UIColor *)highlightedBackgroundColor nonHiglightedBackgroundColor:(UIColor *)nonHighlightedBackgroundColor
    {
        self = [super init];
        if(self)
        {
            _highlightedBackgroundColor = highlightedBackgroundColor;
            _nonHighlightedBackgroundColor = nonHighlightedBackgroundColor;
            self.backgroundColor = nonHighlightedBackgroundColor;
        }
        return self;
    }


    -(void)setHighlighted:(BOOL)highlighted
    {
        if(highlighted)
        {
            self.backgroundColor = self.highlightedBackgroundColor;
        }
        else
        {
            self.backgroundColor = self.nonHighlightedBackgroundColor;
        }
    }

A continuación, cuando se asigno esta célula especifico el resaltado y subrayado no-color de fondo.

Esto funciona perfectamente -. Cuando selecciono la celda el color es lo que quiero

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top