我在自定义表格单元格中有多个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'一词。
我所追求的是能够创建新的子类方法或扩展我已经拥有的方法,以允许我替换标签内所有出现的指定单词。
我已经研究了很多方法,包括第三方框架。我遇到的麻烦是这对我来说是一个学习过程。对我来说,尝试自己完成这项工作会更有益。
提前致谢!
答案 0 :(得分:4)
rangeOfString
返回第一次出现,这是正常行为。
来自Doc:
查找并返回给定字符串第一次出现的范围 在接收者中。
您可以使用NSRegularExpression
,并使用matchesInString:options:range
获取NSArray
NSTextCheckingResult
(具有NSRange
属性),使用{{ {1}}加粗。
这应该可以解决问题:
for loop