iOS改变字符串中多个重复字符串的颜色

作者: 我是七月 | 来源:发表于2019-01-26 14:24 被阅读14次
    奋斗的七月
    需求:做一个新闻类的APP。里面可以进行评论,当@多个人(人名称可以进行充分)进行评论时候,需要把评论的字符串高亮,给一个不同的颜色,

    解决方案:先遍历整个字符串找到所有的人名称所在的位置的index,然后通过index将字符串进行替换,最终可以找到人名称所有的index。根据这个index和人名的length,就可以改变人名的颜色。

    #pragma mark - 获取这个字符串中的所有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]; //获取第一次出现的range
        
        if (rang.location != NSNotFound && rang.length != 0)
        {
            
            [arrayRanges addObject:[NSNumber numberWithInteger:rang.location]];//将第一次的加入到数组中
            
            NSRange rang1 = {0,0};
            
            NSInteger location = 0;
            
            NSInteger length = 0;
            
            for (int i = 0;; I++)
            {
                
                if (0 == i)
                {//去掉这个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);
                    
                }
                
                //在一个range范围内查找另一个字符串的range
                
                rang1 = [text rangeOfString:findText options:NSCaseInsensitiveSearch range:rang1];
                
                if (rang1.location == NSNotFound && rang1.length == 0)
                {
                    
                    break;
                    
                }
                else//添加符合条件的location进数组
                    
                    [arrayRanges addObject:[NSNumber numberWithInteger:rang1.location]];
                
            }
            
            return arrayRanges;
            
        }
        
        return nil;
        
    }
    
    
    上面这个方法可以找到所有的项目字符串的位置index
    /**
     
     改变字符串里面包含的所有相同字符串的的颜色和字号
     @param font 大小
     @param color 颜色
     @param totalString 整个字符串
     @param subArray 需要改变字符串的数组
    
     */
    + (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;
    }
    

    最终的效果图如下:


    最终效果

    相关文章

      网友评论

        本文标题:iOS改变字符串中多个重复字符串的颜色

        本文链接:https://www.haomeiwen.com/subject/zcjijqtx.html