奮斗的七月
需求:做一個(gè)新聞?lì)惖腁PP书释。里面可以進(jìn)行評(píng)論翘贮,當(dāng)@多個(gè)人(人名稱可以進(jìn)行充分)進(jìn)行評(píng)論時(shí)候,需要把評(píng)論的字符串高亮爆惧,給一個(gè)不同的顏色狸页,
解決方案:先遍歷整個(gè)字符串找到所有的人名稱所在的位置的index,然后通過(guò)index將字符串進(jìn)行替換扯再,最終可以找到人名稱所有的index芍耘。根據(jù)這個(gè)index和人名的length,就可以改變?nèi)嗣念伾?/p>
#pragma mark - 獲取這個(gè)字符串中的所有xxx的所在的index
+ (NSMutableArray *)getRangeStr:(NSString *)text findText:(NSString *)findText
{
NSMutableArray *arrayRanges = [NSMutableArray arrayWithCapacity:3];
if (findText == nil && [findText isEqualToString:@""])
{
return nil;
}
NSRange rang = [text rangeOfString:findText]; //獲取第一次出現(xiàn)的range
if (rang.location != NSNotFound && rang.length != 0)
{
[arrayRanges addObject:[NSNumber numberWithInteger:rang.location]];//將第一次的加入到數(shù)組中
NSRange rang1 = {0,0};
NSInteger location = 0;
NSInteger length = 0;
for (int i = 0;; I++)
{
if (0 == i)
{//去掉這個(gè)xxx
location = rang.location + rang.length;
length = text.length - rang.location - rang.length;
rang1 = NSMakeRange(location, length);
}
else
{
location = rang1.location + rang1.length;
length = text.length - rang1.location - rang1.length;
rang1 = NSMakeRange(location, length);
}
//在一個(gè)range范圍內(nèi)查找另一個(gè)字符串的range
rang1 = [text rangeOfString:findText options:NSCaseInsensitiveSearch range:rang1];
if (rang1.location == NSNotFound && rang1.length == 0)
{
break;
}
else//添加符合條件的location進(jìn)數(shù)組
[arrayRanges addObject:[NSNumber numberWithInteger:rang1.location]];
}
return arrayRanges;
}
return nil;
}
上面這個(gè)方法可以找到所有的項(xiàng)目字符串的位置index
/**
改變字符串里面包含的所有相同字符串的的顏色和字號(hào)
@param font 大小
@param color 顏色
@param totalString 整個(gè)字符串
@param subArray 需要改變字符串的數(shù)組
*/
+ (NSMutableAttributedString *)ls_changeFontAndColor:(UIFont *)font Color:(UIColor *)color TotalString:(NSString *)totalString SubStringArray:(NSArray *)subArray {
NSLog(@"zsp===%@ 777%@",totalString,subArray);
NSArray *result = [subArray valueForKeyPath:@"@distinctUnionOfObjects.self"];
NSLog(@"result===888%@",result);
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
for (int index=0; index<result.count; index++) {
NSString *cstrTemp = result[index];
NSMutableArray *locationArr = [self getRangeStr:totalString findText:cstrTemp];
NSLog(@"locationArr====%@",locationArr);
for (int i=0; i<locationArr.count; i++) {
NSNumber *location = locationArr[i];
NSRange rang =NSMakeRange(location.integerValue, cstrTemp.length);
[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:rang];
[attributedStr addAttribute:NSFontAttributeName value:font range:rang];
}
}
return attributedStr;
}
最終的效果圖如下:
最終效果