I am using a label on tableview cell. The cell has been assigned an attributed string, but the problem is that on selection the cell text does not turn white for attributed string.
Is there any way to fix it..?
Any help is appreciated.
Here is a look at my code.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
LHSearchViewCell *cell = [LHSearchViewCell cellForTableView:tableView fromNib:_cellNib];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
cell.headerLabel.textColor = [UIColor darkGrayColor];
cell.headerLabel.highlightedTextColor = [UIColor whiteColor];
cell.headerLabel.font = [UIFont systemFontOfSize:14];
cell.subLabel.font = [UIFont systemFontOfSize:12];
cell.subLabel.textColor = [UIColor darkGrayColor];
cell.subLabel.numberOfLines = 2;
switch (indexPath.section) {
case 0:
{
UIFont *font = [UIFont systemFontOfSize:14.0];
NSDictionary *firstAttributes = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,[UIColor darkGrayColor],NSForegroundColorAttributeName,nil];
UIFont *secondFont = [UIFont systemFontOfSize:10.0];
NSDictionary *secondAttributes = [NSDictionary dictionaryWithObjectsAndKeys:secondFont,NSFontAttributeName,[UIColor lightGrayColor],NSForegroundColorAttributeName,nil];
NSString* completeString = [NSString stringWithFormat:@"%@ | %@",[_libraryPdfArray objectAtIndex:indexPath.row],[_libraryPdfDateArray objectAtIndex:indexPath.row]];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:completeString];
[attributedString setAttributes:firstAttributes range:[completeString rangeOfString:[_libraryPdfArray objectAtIndex:indexPath.row]]];
[attributedString setAttributes:secondAttributes range:[completeString rangeOfString:[_libraryPdfDateArray objectAtIndex:indexPath.row]]];
cell.headerLabel.attributedText = attributedString;
cell.subLabel.text = [_libraryPdfSubtitleArray objectAtIndex:indexPath.row];
}
break;
case 1:
{
UIFont *font = [UIFont systemFontOfSize:14.0];
NSDictionary *firstAttributes = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,[UIColor darkGrayColor],NSForegroundColorAttributeName,nil];
NSString* completeString = [NSString stringWithFormat:@"%@ | %@",[_ebriefingPdfArray objectAtIndex:indexPath.row],[_ebriefingSecondLabelTextArray objectAtIndex:indexPath.row]];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:completeString];
[attributedString setAttributes:firstAttributes range:[completeString rangeOfString:[_ebriefingPdfArray objectAtIndex:indexPath.row]]];
[attributedString setAttributes:firstAttributes range:[completeString rangeOfString:[_ebriefingSubtitleArray objectAtIndex:indexPath.row]]];
cell.headerLabel.attributedText = attributedString;
cell.subLabel.text = [_ebriefingSubtitleArray objectAtIndex:indexPath.row];
}
break;
default:
break;
}
return cell;
}
The main here is to use a NSMutableAttributedString and the selector addAttribute:value:range with the attribute NSForegroundColorAttributeName to change a color of a string range: NSMutableAttributedString *attrsString = [[NSMutableAttributedString alloc] initWithAttributedString:label.
Changing Text Font and Color Or, press Cmd-T. To change the color, select the text box or highlight a portion of the text, and click the color button in the Inspector.
A mutable string with associated attributes (such as visual style, hyperlinks, or accessibility data) for portions of its text.
Try to use this one
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UILabel *label = (UILabel *)[cell viewWithTag:yourTag];
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:label.text];
[str addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(10,10)];
label.attributedText = str
}
I have got the solution.
In Cell class, we can input attributed strings as below
- (void) formatText:(BOOL)isSelected{
UIFont *font = [UIFont systemFontOfSize:14.0];
UIFont *secondFont = [UIFont systemFontOfSize:10.0];
NSMutableDictionary *firstAttributes;
NSMutableDictionary *secondAttributes;
NSDictionary *firstAttributeFont = @{NSFontAttributeName:font};
NSDictionary *secondAttributeFont = @{NSFontAttributeName:secondFont};
[firstAttributes addEntriesFromDictionary:firstAttributeFont];
[secondAttributes addEntriesFromDictionary:secondAttributeFont];
if (!isSelected) {
[firstAttributes addEntriesFromDictionary:@{NSForegroundColorAttributeName:[UIColor darkGrayColor]}];
[secondAttributes addEntriesFromDictionary:@{NSForegroundColorAttributeName:[UIColor lightGrayColor]}];
}
else{
[firstAttributes addEntriesFromDictionary:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
[secondAttributes addEntriesFromDictionary:@{NSForegroundColorAttributeName:[UIColor colorWithWhite:1.0 alpha:4.0]}];
}
NSString* completeString = [NSString stringWithFormat:@"%@ %@",self.firstAttributeText,self.secondAttributeText];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:completeString];
[attributedString setAttributes:firstAttributes range:[completeString rangeOfString:self.firstAttributeText]];
[attributedString setAttributes:secondAttributes range:[completeString rangeOfString:self.secondAttributeText]];
self.headerLabel.attributedText = attributedString;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated{
[super setSelected:selected animated:animated];
[self formatText:selected];
// Configure the view for the selected state
}
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
[super setHighlighted:highlighted animated:animated];
[self formatText:highlighted];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With