如何更改目标c中特定字符/单词的颜色

时间:2015-06-18 10:51:20

标签: ios objective-c

我有一个长字符串作为段落,并希望在字符串中为特定单词(字符串中出现的所有数字)着色。谁能帮我吗? 感谢

5 个答案:

答案 0 :(得分:5)

将字符串转换为属性字符串(可变),然后搜索字符串以查找要更改/突出显示的部分的范围,并将属性添加到属性字符串的那些范围。

答案 1 :(得分:3)

你可以使用 https://github.com/kovpas/BOString

然后您的代码可以是这样的:

NSString *string = @"String test String";
NSAttributedString *result = [string bos_makeString:^(BOStringMaker *make) {
        make.foregroundColor(UIColor blackColor]);
        make.each.substring(@"String", ^{          
               make.foregroundColor(UIColor greenColor]);
        });
    }];

这会使文本中的每个“字符串”变为绿色。剩下的就是黑色。然后将此属性字符串放入UILabel \ UITextView等。

答案 2 :(得分:1)

尝试这样就可以了解

注意:我们无法在一个标签或文本字段中显示"不同的颜色"。标记"等于单词中的字母数"。并排查看作为一个标签。

在Viewcontroller.h中

@property (strong, nonatomic) IBOutlet UITextField *tf1;
@property (strong, nonatomic) IBOutlet UITextField *tf2;
@property (strong, nonatomic) IBOutlet UITextField *tf3;
@property (strong, nonatomic) IBOutlet UITextField *tf4;
@property (strong, nonatomic) IBOutlet UITextField *tf5;

在ViewController.m中

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableString *strName=[[NSMutableString alloc]initWithFormat:@"ABCDE"];
    for (int i=0; i<[strName length]; i++) {
        NSString *str=[strName substringWithRange:NSMakeRange(i, 1)];

        if (i==0) {
            self.tf1.text=str;
            self.tf1.textColor=[UIColor redColor];
        }
        else if (i==1){
            self.tf2.text=str;
            self.tf2.textColor=[UIColor greenColor];
        }
        else if (i==2){
            self.tf3.text=str;
            self.tf3.textColor=[UIColor orangeColor];
        }
        else if (i==3){
            self.tf4.text=str;
            self.tf4.textColor=[UIColor grayColor];
        }
        else if (i==4){
            self.tf5.text=str;
            self.tf5.textColor=[UIColor redColor];
        }
    }
}

答案 3 :(得分:0)

为UILabel创建一个类别并添加这些功能。

  - (void)boldRange:(NSRange)range {
    if (![self respondsToSelector:@selector(setAttributedText:)]) {
    return;
 }
    NSMutableAttributedString *attributedText;
    if (!self.attributedText) {
    attributedText = [[NSMutableAttributedString alloc] initWithString:self.text];
} else {
    attributedText = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
}

  [attributedText setAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize] } range:range];
  self.attributedText = attributedText;

}

- (void)boldSubstring:(NSString*)substring {
  NSRange range = [self.text rangeOfString:substring];
  // [self boldRange:range];
  if (![self respondsToSelector:@selector(setAttributedText:)]) {
    return;
  }
  NSMutableAttributedString *attributedText;
  if (!self.attributedText) {
    attributedText = [[NSMutableAttributedString alloc] initWithString:self.text];
  } else {
      attributedText = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
  }

  while (range.location != NSNotFound)
  {
      [attributedText setAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize] } range:range];

      NSRange rangeToSearch;
      rangeToSearch.location = range.location + range.length;
      rangeToSearch.length = self.text.length - rangeToSearch.location;
      range = [self.text rangeOfString:substring options:0 range:rangeToSearch];
      [attributedText setAttributes:@{NSForegroundColorAttributeName:    [UIColor redColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize] } range:range];
      self.attributedText = attributedText;
    }

}

使用为

 [someLabel boldSubstring: @"0"];

我已经改变了颜色和粗体特殊字符。相应地改变它 希望它有所帮助。

答案 4 :(得分:-1)

在“界面”构建器中,您可以直接将其设置为Attributed,如图所示,

enter image description here

在这里,您可以选择特定世界并更改其颜色。