Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@Takumi_Mori

UILabelで、特定文字の装飾を変更する

UILabelで、文章中の特定文字列などに対して文字色の変更や
太字などの装飾をしたいことがあります。

そんな時のために、UILabelのカテゴリを作成しておくと便利です。

UILabel+attributed
@implementation UILabel (attributed)

/**
 *  指定テキストの箇所を太字にする
 */
- (void)atr_addAttributeBoldForText:(NSString *)text {
    NSInteger numberOfLines = self.numberOfLines;

    NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];

    UIFont *font = [UIFont boldSystemFontOfSize:self.font.pointSize];
    [attr addAttribute:NSFontAttributeName value:font range:[self.text rangeOfString:text]];

    self.numberOfLines = numberOfLines;
    self.attributedText = attr;
}

/*
 *  指定テキストの箇所を赤太字にする
 */
- (void)chz_addAttributeRedForText:(NSString *)text {
    NSInteger numberOfLines = self.numberOfLines;

    NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];

    UIFont *font = [UIFont boldSystemFontOfSize:self.font.pointSize];

    [attr addAttribute:NSFontAttributeName value:font range:[self.text rangeOfString:text]];
    [attr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[self.text rangeOfString:text]];

    self.numberOfLines = numberOfLines;
    self.attributedText = attr;
}

@end

気をつけなくてはいけないのは、attributeの更新をすると
numberOfLinesの情報がデフォルトで上書きされてしまったりすること。
(NSParagraphStyleを変更しなければ大丈夫だったかな?)

変更前に情報を保持しておいて、最後にセットし直すようにしておくと安全です。
NSParagraphStyleを変更する場合は、textAlighmentやlineBreakModeなどの
情報も含まれているので上書きする際には注意が必要です。

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What is going on with this article?