我是iOS开发的新手,我试图使用TTTAttributedLabel突出显示NSString中的重复文本,但我总是获得第一次出现的粗体。这是我正在使用的一个小样本,我做错了什么?我不确定图书馆是否准备好了这种功能。
UIView *viewOfSection1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1700)];
viewOfSection1.backgroundColor = [UIColor whiteColor];
KMSection *section1 = [[KMSection alloc] init];
section1.view = viewOfSection1;
section1.title = @"Some Title";
section1.colorForBackground = [UIColor whiteColor];
TTTAttributedLabel *label = [[TTTAttributedLabel alloc] initWithFrame:CGRectMake(0, 0, 300, 1700)];
label.font = [UIFont systemFontOfSize:14];
label.textColor = [UIColor darkGrayColor];
label.lineBreakMode = LINE_BREAK_WORD_WRAP;
label.numberOfLines = 0;
label.textAlignment = NSTextAlignmentJustified;
[label setTextInsets:UIEdgeInsetsMake(0, 40, 0, 7)];
NSString *text = @"This is text sample , text sample"
[label setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^ NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
NSRange boldRange = [[mutableAttributedString string] rangeOfString:@"text," options:NSCaseInsensitiveSearch];
NSRange boldRange1 = [[mutableAttributedString string] rangeOfString:@"sample" options:NSCaseInsensitiveSearch];
UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:14];
CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);
if (font) {
[mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)font range:boldRange];
[mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)font range:boldRange1];
CFRelease(font);
}
return mutableAttributedString;
}];
[viewOfSection1 addSubview:label];
return @[section1];
执行我正在寻找的内容的唯一方法是将文本分成两部分,并分别突出显示文字。
先谢谢。
答案 0 :(得分:0)
这是因为字符串的范围只返回一次搜索字符串,多次出现,你可以试试这个。
- (NSArray *)rangesOfString:(NSString *)searchString inString:(NSString *)str withOption:(NSStringCompareOptions)option{
NSMutableArray *results = [NSMutableArray array];
NSRange searchRange = NSMakeRange(0, [str length]);
NSRange range = [str rangeOfString:searchString options:option range:searchRange];
while (range.location != NSNotFound) {
[results addObject:[NSValue valueWithRange:range]];
searchRange = NSMakeRange(NSMaxRange(range), [str length] - NSMaxRange(range));
range = [str rangeOfString:searchString options:option range:searchRange];
}
return results;
}
然后在字符串中找到多次出现并使文本变为粗体。
NSArray *rangeArr = [self rangesOfString:@"text" inString:mutableAttributedString.string withOption:NSCaseInsensitiveSearch];
NSArray *rangeArr1 = [self rangesOfString:@"sample" inString:mutableAttributedString.string withOption:NSCaseInsensitiveSearch];
NSMutableArray *boldArray = [NSMutableArray arrayWithArray:rangeArr];
[boldArray addObjectsFromArray:rangeArr1];
UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:14];
CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);
if (font) {
for (NSValue *rangeValue in boldArray) {
NSRange boldRange = rangeValue.rangeValue;
[mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)font range:boldRange];
}
CFRelease(font);
}