Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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;
}
like image 456
Ankit Srivastava Avatar asked Jun 28 '13 09:06

Ankit Srivastava


People also ask

How do I change the color of NSMutableAttributedString?

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.

How do you highlight text in Swift?

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.

What is NSMutableAttributedString?

A mutable string with associated attributes (such as visual style, hyperlinks, or accessibility data) for portions of its text.


2 Answers

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
        }
like image 186
Dharmbir Singh Avatar answered Oct 01 '22 23:10

Dharmbir Singh


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

}
like image 21
Ankit Srivastava Avatar answered Oct 02 '22 00:10

Ankit Srivastava