ios - Estilo de selección de UITableViewCell personalizado?
objective-c click (9)
Cuando hago clic en mi UITableViewCell
, la parte de fondo (las áreas que no cubre mi imagen de fondo) se vuelve azul cuando hago clic en la celda. Además, todos los UILabel
s en la celda se ponen blancos cuando se hace clic, que es lo que quiero.
Sin embargo, lo que no quiero es el fondo azul cuando hago clic en él, pero si selectionstylenone
, entonces pierdo los colores resaltados para los UILabel
s en la celda.
Entonces, ¿hay alguna manera de deshacerse del fondo azul cuando se hace clic en la celda, pero para mantener los colores resaltados de los UILabel
s?
Anulando las siguientes funciones en su subclase de UITableViewCell
.
override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }
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 :)
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é configurado en Ninguno .
La única forma en que podía hacerlo funcionar era mediante:
- (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;
}
Para obtener este trabajo, debe establecer el estilo de selección en UITableViewCellSelectionStyleNone
y luego debe anular el método setSelected:animated:
para obtener el resultado que desea. Hace lo mismo que el mecanismo de selección automática 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 UITableViewCell, etc.
Para que coincida con el comportamiento del estilo de selección estándar, querrá anular tanto setHighlighted:animated:
y setSelected:animated:
Es probable que 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()
}
}
Puede usar los siguientes métodos delegados después de establecer el estilo de selección en ninguno:
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
Implementa tu código aquí, como este
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
[cell.lbls setTextColor:[UIColor whiteColor]];
return indexPath;
}
Puedes hacer esto de la siguiente manera. Establezca el estilo de selección de su celda de tabla en UITableViewCellSelectionStyleNone
. Esto eliminará el resaltado de fondo azul. Luego, para que la etiqueta de texto resalte funcione de la manera que desee, en lugar de usar la clase UITableViewCell predeterminada, cree una subclase de UITableViewCell
y anule la implementación predeterminada de setHighlighted:animated
con su propia implementación que establece los colores de la etiqueta como desee. en el estado resaltado.
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
if (highlighted) {
self.textLabel.textColor = [UIColor whiteColor];
} else {
self.textLabel.textColor = [UIColor blackColor];
}
}
Si trabaja antes de iOS7, haga que su estilo de selección de celda no
cell.selectionStyle = UITableViewCellSelectionStyleNone;
De lo contrario, dejarlo por UITableViewCellSelectionStyleDefault
Entonces:
UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView = selectedView;
Este código funcionará correctamente