UILabel Bold / Highlight所有出现的SubString

时间:2014-05-06 13:27:07

标签: ios objective-c ios7 uilabel textkit

我在自定义表格单元格中有多个UILabel。这些标签包含不同的文字或不同的长度。

目前我有UILabel Subclassed允许我实现这些方法

- (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:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]} range:range];
self.attributedText = attributedText;
NSLog(@"%@", NSStringFromRange(range));
}

- (void)boldSubstring:(NSString*)substring {
    NSRange range = [self.text rangeOfString:substring];
    [self boldRange:range];
}

这样我就可以拨打[cell.StoryLabel boldSubstring:@"test"]; BOLD 第一次出现'test'一词。

我所追求的是能够创建新的子类方法或扩展我已经拥有的方法,以允许我替换标签内所有出现的指定单词。

我已经研究了很多方法,包括第三方框架。我遇到的麻烦是这对我来说是一个学习过程。对我来说,尝试自己完成这项工作会更有益。

提前致谢!

1 个答案:

答案 0 :(得分:4)

rangeOfString返回第一次出现,这是正常行为。 来自Doc

  

查找并返回给定字符串第一次出现的范围   在接收者中。

您可以使用NSRegularExpression,并使用matchesInString:options:range获取NSArray NSTextCheckingResult(具有NSRange属性),使用{{ {1}}加粗。

这应该可以解决问题:

for loop