Search code examples
iosobjective-cnsattributedstring

How to find and apply two fonts in a label in IOS


I know to apply two fonts in a label for single word with one font and rest with another font using below code..

    int lengthofname@"Anand";

    UIFont *boldFont = [UIFont fontWithName:@"BodoniStd" size:15];
    UIFont *regularFont = [UIFont fontWithName:@"BodoniStd-BoldItalic" size:15];
    //UIColor *foregroundColor = [UIColor clearColor];

    // Create the attributes
    NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:
                           boldFont, NSFontAttributeName,nil];

    //NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:
                          // boldFont, NSFontAttributeName,
                          // foregroundColor, NSForegroundColorAttributeName, nil];
    NSDictionary *subAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
                              regularFont, NSFontAttributeName, nil];

    const NSRange range = NSMakeRange(0,lengthofname);

    // range of " 2012/10/14 ". Ideally this should not be hardcoded const

    // Create the attributed string (text + attributes)
    NSMutableAttributedString *attributedText =
    [[NSMutableAttributedString alloc] initWithString:@"Anand is good programmer"
                                           attributes:attrs];
    [attributedText setAttributes:subAttrs range:range];

    // Set it in our UILabel and we are done!
    [self.descLabel setAttributedText:attributedText];

My requirement is to find some x words in a label and then apply Bold font and rest of text with Regular font..

Bold to some words and Regular to rest of the texts in a label

Please suggest any ideas. Thanks in Advance..!


Solution

  • In this example there highlighted words are not funded with regular expression but I believe there is some list (NSArray: STANDARD, EXPRESS, NEXT DAY, etc) of keywords. And what you have to do is enumerate that array to find the rang in text and if founded apply the different font style, something like that:

    for (NSString * keyword in listOfKeywordArray) {
        NSRange range = [longTextString rangeOfString:@"keyword"];
        if (range.location != NSNotFound) {
            //Keyword found, apply different font
            // This of course needs to be changed to apply font you want
            [attrString addAttribute:NSFontAttributeName value:fontName range:range];
        }
    }