thomasdegry
thomasdegry

Reputation: 55

Have multiple ranges with different attributes on NSAttributedString

I have a multiline UILabel of which I would like to increase the line height, but I also want part of it to be a different color, only the line height works fine. But as soon as I try to change the color for a certain range it just goes back to the stock appearance, no line either..

Anyone a tip? This is done in the content setter.


- (void)setContent:(NSString *)content {
    _content = content;

    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.content];
    NSMutableAttributedString *mutableAttrString = [attributedString mutableCopy];

    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    [paragraphStyle setLineSpacing: 5.0f];

    NSDictionary *attributes = @{
                                 NSFontAttributeName: [UIFont fontWithName:@"BentonSans-Regular" size:16.0],
                                 NSParagraphStyleAttributeName: paragraphStyle
                                };
    NSDictionary *colorAttributes = @{
                   NSForegroundColorAttributeName: [UIColor redColor]
                   };
    [mutableAttrString addAttributes:attributes range:NSRangeFromString(self.content)];
    [mutableAttrString addAttributes:colorAttributes range:NSMakeRange(4, 8)];


    [self.label setAttributedText: mutableAttrString];
}

Thanks!

Upvotes: 0

Views: 2548

Answers (2)

Dheeraj Singh
Dheeraj Singh

Reputation: 5183

in your viewdidLoad Method assign string to self.content :

self.content = @"pass your text ";

// Remove the First line of your method it is not needed

- (void)setContent:(NSString *)content {

    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.content];
    NSMutableAttributedString *mutableAttrString = [attributedString mutableCopy];

    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    [paragraphStyle setLineSpacing: 5.0f];

    NSDictionary *attributes = @{
                                 NSFontAttributeName: [UIFont fontWithName:@"BentonSans-Regular" size:16.0],
                                 NSParagraphStyleAttributeName: paragraphStyle
                                };
    NSDictionary *colorAttributes = @{
                   NSForegroundColorAttributeName: [UIColor redColor]
                   };
    [mutableAttrString addAttributes:attributes range:NSRangeFromString(self.content)];
    [mutableAttrString addAttributes:colorAttributes range:NSMakeRange(4, 8)];


    [self.label setAttributedText: mutableAttrString];
}

Upvotes: 0

user3386109
user3386109

Reputation: 34829

The NSRangeFromString function expects a string like @"{3,10}". In other words, it expects a string that contains two numbers that specify the starting location and length of the range. I suspect that the content string isn't a string like that.

So this line

[mutableAttrString addAttributes:attributes range:NSRangeFromString(self.content)];

should be

[mutableAttrString addAttributes:attributes range:NSMakeRange(0,mutableAttrString.length)];

Upvotes: 2

Related Questions