Cuando hago clic en mi UITableViewCell
, la parte de fondo (las áreas que mi imagen de fondo no cubre) se vuelve azul cuando hago clic en la celda. Además, todos los UILabel
s en la celda se vuelven blancos cuando se hace clic en ella, que es lo que quiero.
Sin embargo, lo que no quiero es el fondo azul cuando hago clic en él, pero si lo hago selectionstylenone
, pierdo los colores resaltados para las UILabel
s en la celda.
Entonces, ¿hay alguna forma de deshacerse del fondo azul cuando se hace clic en la celda, pero para mantener los colores resaltados de la UILabel
s?
ios
objective-c
uitableview
click
selection
SimplyKiwi
fuente
fuente
Respuestas:
Puede hacer esto de la siguiente manera. Establezca el estilo de selección de la celda de la tabla en
UITableViewCellSelectionStyleNone
. Esto eliminará el resaltado de fondo azul. Luego, para que el resaltado de la etiqueta de texto funcione de la manera que desee, en lugar de usar la clase UITableViewCell predeterminada, cree una subclase deUITableViewCell
y anule la implementación predeterminada desetHighlighted:animated
con su propia implementación que establece los colores de la etiqueta como lo desee según el estado resaltado .- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { if (highlighted) { self.textLabel.textColor = [UIColor whiteColor]; } else { self.textLabel.textColor = [UIColor blackColor]; } }
fuente
setHighlighted:animated:
, que toma elanimated
parámetro. Anular elsetHighlighted:
método de un parámetro no funcionará.[super setHighlighted:highlighted animated:animated];
?setHighlighted
ysetSelected
. Primero selecciona una celda, ok, el color del texto cambia a blanco, luego desplaza esa celda fuera de la parte visual de la pantalla, luego se desplaza hacia atrás, mira, el color del texto se vuelve negroSi trabaja antes de iOS7, haga que su estilo de selección de celda no sea ninguno
cell.selectionStyle = UITableViewCellSelectionStyleNone;
De lo contrario, déjalo
UITableViewCellSelectionStyleDefault
Entonces:
UIView *selectedView = [[UIView alloc]init]; selectedView.backgroundColor = [UIColor redColor]; cell.selectedBackgroundView = selectedView;
Este código funcionará correctamente
fuente
Puede utilizar los siguientes métodos de delegado después de establecer el estilo de selección en ninguno:
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
Implementa tu código aquí, así
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath]; [cell.lbls setTextColor:[UIColor whiteColor]]; return indexPath; }
fuente
Para que esto funcione, debe establecer el estilo de selección en
UITableViewCellSelectionStyleNone
y luego debe anular el métodosetSelected:animated:
para obtener el resultado que desea. Hace lo mismo que hace el mecanismo de selección automatizada de iOS cuando ve la selección azul (o gris).- (void)setSelected:(BOOL)selected animated:(BOOL)animated { if (selected) { self.textLabel.textColor = [UIColor whiteColor]; } else { self.textLabel.textColor = [UIColor blackColor]; } }
También puede personalizar esto de otra manera, por ejemplo, cambiando el fondo de UITableViewCell, etc.
fuente
En cellForRowAtIndexPath use este código:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; [cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels
Espero que esto funcione para usted.
Disfruta de la codificación :)
fuente
Anulando las siguientes funciones en su subclase de
UITableViewCell
.fuente
Para igualar el comportamiento de estilo de selección estándar, querrá anular tanto
setHighlighted:animated:
ysetSelected:animated:
. Probablemente desee mover ese código a un método compartido para evitar el código duplicado.override func setHighlighted(highlighted: Bool, animated: Bool) { setAsSelectedOrHighlighted(highlighted, animated: animated) super.setHighlighted(highlighted, animated: animated) } override func setSelected(selected: Bool, animated: Bool) { setAsSelectedOrHighlighted(selected, animated: animated) super.setSelected(selected, animated: animated) } func setAsSelectedOrHighlighted(selectedOrHighlighted: Bool, animated: Bool) { let action = { // Set animatable properties } if animated { UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseInOut, animations: action, completion: nil) } else { action() } }
fuente
En su celda personalizada, anule la implementación predeterminada de awakeFromNib & setSelected:
- (void)awakeFromNib { // Initialization code UIImageView * imageView = [[UIImageView alloc] initWithFrame:self.bounds]; imageView.image = [UIImage imageNamed:@"cell_selected_img"]; self.selectedBackgroundView = imageView; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state if (selected) { self.lblCustomText.textColor = [UIColor whiteColor]; } else { self.lblCustomText.textColor = [UIColor blackColor]; } }
También asegúrese de que el estilo de selección NO esté establecido en Ninguno .
fuente
La única forma en que podía hacerlo funcionar era:
- (void)awakeFromNib { UIView *bgColorView = [[UIView alloc] init]; bgColorView.backgroundColor = [UIColor colorWithRed:(55.0/255.0) green:(163.0/255.0) blue:(237.0/255.0) alpha:1.0]; bgColorView.layer.masksToBounds = YES; self.selectedBackgroundView = bgColorView; }
fuente
También puede utilizar contentView.alpha. Aquí está el ejemplo.
Primero, establezca el estilo de selección para su celda:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
A continuación, en la clase de celda personalizada, anule este método con un ejemplo de animación:
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { [super setHighlighted:highlighted animated:animated]; if (highlighted) { [UIView animateWithDuration:0.15f animations:^{ self.contentView.alpha = 0.5f; }]; } else { [UIView animateWithDuration:0.35f animations:^{ self.contentView.alpha = 1.f; }]; } }
fuente