J'ai une vue de table et je veux savoir comment changer la couleur du texte de la ligne sélectionnée, par exemple en rouge? J'ai essayé par ce code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell= [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
cell.text = [localArray objectAtIndex:indexPath.row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
cityName = [localArray objectAtIndex:indexPath.row];
UITableViewCell* theCell = [tableView cellForRowAtIndexPath:indexPath];
theCell.textColor = [UIColor redColor];
//theCell.textLabel.textColor = [UIColor redColor];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
(1) Lorsque je sélectionne une ligne, la couleur du texte passe au rouge, mais lorsque je sélectionne une autre ligne, le texte de la ligne précédemment sélectionnée reste rouge. Comment puis-je résoudre ça ?
(2) Lorsque je fais défiler le changement de couleur du texte du tableau vers la couleur noire, comment résoudre ce problème?
Merci..
Faites ceci dans tableView:cellForRowAtIndexPath:
:
cell.textLabel.highlightedTextColor = [UIColor redColor];
(Et n'utilisez pas cell.text = ...
plus. Il est obsolète depuis près de 2 ans maintenant. Utilisation cell.textLabel.text = ...
au lieu.)
Comme Raphael Oliveira mentionné dans les commentaires, si le style de sélection de votre cellule est égal à UITableViewCellSelectionStyleNone
cela ne fonctionnera pas. Consultez également Storyboard pour le style de sélection.
Si vous souhaitez modifier la couleur du texte uniquement, sans changer la couleur d'arrière-plan des cellules. vous pouvez l'utiliser. Écrivez ce code dans la méthode cellForRowAtIndexPath
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = selectionColor;
cell.textLabel.highlightedTextColor = [UIColor redColor];
J'ai eu le même problème, essayez ça!
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
for (id object in cell.superview.subviews) {
if ([object isKindOfClass:[UITableViewCell class]]) {
UITableViewCell *cellNotSelected = (UITableViewCell*)object;
cellNotSelected.textLabel.textColor = [UIColor blackColor];
}
}
cell.textLabel.textColor = [UIColor redColor];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
C'est peut-être la solution à votre problème (et au mien).
Si vous sous-classez déjà UITableViewCell
, il est plus facile/plus propre de définir les couleurs dans la méthode awakeFromNib
(en supposant que vous instanciez à partir d'un storyboard ou xib).
@implementation MySubclassTableViewCell
- (void)awakeFromNib {
[super awakeFromNib];
self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.frame];
self.selectedBackgroundView.backgroundColor = [UIColor colorWithRed:0.1 green:0.308 blue:0.173 alpha:0.6];
self.customLabel.highlightedTextColor = [UIColor whiteColor];
}
@end