Ankit Srivastava Ankit Srivastava - 2 months ago 49
iOS Question

Set highlighted text color for UILabel using NSAttributedString.?

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;
}

Answer

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];

}
Comments