Tengo la costumbre de tener un celular y cuando el usuario selecciona la celda, me gustaría que el texto en los dos UILabels para cambiar a gris claro.

ChecklistCell.h:

#import <UIKit/UIKit.h>


@interface ChecklistCell : UITableViewCell {
    UILabel *nameLabel;
    UILabel *colorLabel;
    BOOL selected;


}

@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
@property (nonatomic, retain) IBOutlet UILabel *colorLabel;



@end

ChecklistCell.m:

#import "ChecklistCell.h"


@implementation ChecklistCell
@synthesize colorLabel,nameLabel;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
        //Initialization code
    }
    return self;
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    [super setSelected:selected animated:animated];

    //Configure the view for the selected state
}


- (void)dealloc {
    [nameLabel release];
    [colorLabel release];
        [super dealloc];
}


@end

OriginalEl autor Brodie | 2010-05-19

5 Comentarios

  1. 5

    En su didSelectRowAtIndexPath método, hacer una llamada para obtener la corriente de la célula y actualizar en consecuencia:

    CheckListCell* theCell = (CheckListCell*)[tableView cellForRowAtIndexPath:indexPath];
    theCell.nameLabel.textColor = [UIColor lightGrayColor];
    theCell.colorLabel.textColor = [UIColor lightGrayColor];
    esto funciona perfectamente excepto cuando me desplaza fuera de las células modificadas, a continuación, desplácese hacia atrás, el celular es de volver a la orig estado. Así que yo supongo que tengo que seguir la pista de que las células son modificadas en cualquier otro lugar? Supongo mantener una matriz de indexPaths que han sido modificados, a continuación, en la cellForRowAtIndexPath método tiene que comprobar la matriz para que el índice de camino? O es que hay ane asier manera?
    y, por supuesto, ahora que estoy tratando de hacer que me relize no hay una manera fácil de comparar dos indexPaths….
    Sí, usted realmente debe actualizar el origen de datos al mismo tiempo. Lo que he descrito es realmente sólo para conseguir la instantánea de actualización visual. Estoy asumiendo que tener un array de objetos que se utiliza como el origen de datos para la tabla? Se podría añadir una propiedad al objeto de definir si está activada o no, la actualización de este en el didSelectRowAtIndexPath método (así como el código de arriba), y su uso para determinar textColor en cellForRowAtIndexPath método. La esperanza de que eso es claro!
    sí es claro, pero para esta tabla de los que no puedo hacer nada con el origen de datos como este sin tener que rehacer todo. Estoy en lugar de hacer una aray de indexpaths, y la creación de un bucle en el que se compara la indexpath con todas las de la indexpaths en la matriz. No estoy seguro de que funcionará, aunque. cuando intento agregar un índice ruta de acceso a la mutablearray, no pasa nada y un NSLOG mostrando el contenido de la matriz muestra siempre nulo, incluso a partir de un supuesto éxito addObject:indexPath]. es que simplemente no es posible añadir indexpaths a una matriz o solo estoy haciendo algo mal (de nuevo, lol)
    tiene usted alloc/init ed la matriz?

    OriginalEl autor Ben Williams

  2. 13

    Puesto que usted está utilizando una tabla personalizada de la célula, puede implementar el código para establecer los colores de etiqueta mediante la aplicación de la setSelected y setHighlighted métodos personalizado UITableViewCell. De esta forma podrá capturar todos los cambios de estado a partir de la selección, aunque hay algunas difíciles de casos, como cuando setHighlighting es llamado SIN al seleccionar y arrastrar fuera de la célula después de que se ha seleccionado ya. Aquí es el enfoque que he utilizado, que creo que define el color de forma apropiada en todos los casos.

    - (void)updateCellDisplay {
        if (self.selected || self.highlighted) {
            self.nameLabel.textColor = [UIColor lightGrayColor];
            self.colorLabel.textColor = [UIColor lightGrayColor];
        }
        else {
            self.nameLabel.textColor = [UIColor blackColor];
            self.colorLabel.textColor = [UIColor blackColor];
        }
    }
    
    - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
        [super setHighlighted:highlighted animated:animated];
        [self updateCellDisplay];
    }
    
    - (void) setSelected:(BOOL)selected animated:(BOOL)animated {
        [super setSelected:selected animated:animated];
        [self updateCellDisplay];
    }

    OriginalEl autor Matt R

  3. 0

    En tableView:didSelectRowAtIndexPath: récord de la ruta del índice de la celda seleccionada. En tableView:cellForRowAtIndexPath: acaba de comprobar si coincide con su guarda ruta del índice, y establecer el color del texto en consecuencia. No estoy completamente seguro de si la célula es dibujar después de una selección, de modo que usted puede necesitar para reloadData después de la selección, pero debe ser lo suficientemente rápido como si el almacenamiento en caché células/siguiente célula normal dibujo mejores prácticas.

    O uso reloadRowsAtIndexPaths:withRowAnimation con UITableViewRowAnimationNone. Pero entonces usted necesita para mantener un registro de la última celda en la que dibujó en el texto de color gris y se vuelve a dibujar en estilo sencillo también.

    OriginalEl autor Adam Eberbach

  4. 0

    La forma en que me ordena esta fue en «didSelectRowAtIndexPath:» bucle a través de todos los subvistas de formato tableview y el conjunto de todas las etiquetas de texto para el color por defecto como esta:

    for(CustomTableViewCell *tableCell in [tableView subviews]) {
        if([tableCell isKindOfClass:[UITableViewCell class]]) {
            [tableCell.textLabel setTextColor: [UIColor blackColor]];
        }
    }

    …. a continuación, establezca la tabla seleccionada la celda en blanco.

    [[tableView cellForRowAtIndexPath:indexPath].textLabel setTextColor: [UIColor whiteColor]];
    Como se puede ver, como yo en bucle a través de revisé para ver si la subvista era una especie de UITableViewCell y sólo se ha cambiado el color si lo fue. Espero que esto ayude!

    OriginalEl autor jodm

  5. 0

    Es muy simple, sólo tiene Que utilizar esta(a continuación) método, aquí estoy de configuración alternativo color de celda

    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.row%2 == 0) 
        {
             tCell.cellLabel.textColor = [UIColor grayColor];
        }
        else
        {
             tCell.cellLabel.textColor = [UIColor blackColor];
        }
    }

    PS – sin necesidad de utilizar cellForRowAtIndexPath: método para cambiar cellText Propties..

    OriginalEl autor mavericks

Dejar respuesta

Please enter your comment!
Please enter your name here