天天看点

NSMutableAttributedString,图文混排,字号变换,颜色变换

一些个人学习的的小总结,纯基础

1、 一个判断字符串是否为空的判断

- (BOOL)judgeString:(NSString *)str
{
    if (str==nil || [str isEqualToString:@""] || [str isEqualToString:@"(null)"] || [str isEqualToString:@"null"] || [str isKindOfClass:[NSNull class]]){
        return NO;
    }
    return YES;
}
           

这个方法基本上把空字符串的全部情况都考虑到了,喜欢的小伙伴可以用一下。

2、有时侯我们需要在一个label里面显示出不同的字号,或者不同的颜色,或者是不同颜色不同字号同时出现。这也就用到了attributeString

两个方法配合使用,基本上就剋一解决了 。

//<span style="font-family: Menlo; font-size: 14px;">(1)颜色方案   </span>处理字符串,前后颜色不一样,index代表前半部分的长度
-(NSMutableAttributedString *)setString:(NSString *)string withFrontColor:(NSString *)fString breakAtIndex:(NSInteger)index andBackColor:(NSString *)bString
{
    //容错
    if (fString.length<6) {
        fString = @"000000";
    }
    if (bString.length <6) {
        bString = @"000000";
    }
    
    NSMutableAttributedString *attributeStr=[[NSMutableAttributedString alloc]initWithString:string];
    if (attributeStr.length<1) {
        return attributeStr;
    }
    if (index<1 || index >string.length) {
        return attributeStr;
    }
    
    //改变颜色
    [attributeStr addAttribute:NSForegroundColorAttributeName value:[Utilities colorWithHexString:fString] range:NSMakeRange(0,index)];
    [attributeStr addAttribute:NSForegroundColorAttributeName value:[Utilities colorWithHexString:bString] range:NSMakeRange(index,string.length-index)];
    
    return attributeStr;
}
//(2) 字号处理  处理字符串,前后字号不一样,index代表前半部分的长度
-(NSMutableAttributedString *)setString:(NSMutableAttributedString *)attributeStr withFrontFont:(NSInteger)fFont breakAtIndex:(NSInteger)index andBackFont:(NSInteger)bFont
{
    //容错
    if (attributeStr.length<1) {
        return attributeStr;
    }
    if (index <1 || index>attributeStr.length) {
        return attributeStr;
    }
    //改变字号
    [attributeStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:fFont] range:NSMakeRange(0,index)];
    [attributeStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:bFont] range:NSMakeRange(index,attributeStr.length-index)];
    
    return attributeStr;
}
           

方法是我自己定义的,小伙伴们 可以根据自己需求,进一步优化,比如返回类型、输入字符串的类型。

上面方法中的utilities是我的一个帮助类,所用的是设置颜色的一个方法,很多小伙伴也应该用过,如果没有这样的 帮助类,那就把颜色字符串 直接换成UIColor好了。

NSAttributedString 里面有很多类似于 NSFontAttributeName 的处理字符串的属性,大家可以command+点进试一下,此处不在赘述。
           

3 、去掉某个字符,这里就去掉一下空格

//去掉空格
- (NSString *)updating:(NSString *)string
{
    NSString * noSpaceString = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
    if (![self judgeString:noSpaceString]) {
        string = @"这个字符串全是空格";
    }
    return string;
}
           

4 、 根据某个字符进行分割分组

NSMutableArray *tempArray = [[NSMutableArray alloc]init];
        [tempArray </span>addObjectsFromArray:[toHandelString componentsSeparatedByString:@","]];
           

这样就把字符串根据“,”分隔开来了。我们也可以根据需求使用字符串里面别的字符进行分割

5. 图文混排   适用于UILabel,textView,Textfield   等可设置attributeString  的控件

- (NSMutableAttributedString *)handelString:(NSString *)string addImage:(UIImage *)image imageSize:(CGSize)size atIndex:(NSInteger)index {
    
    NSMutableAttributedString *attString = [[NSMutableAttributedString alloc]initWithString:string];

    
    if (index<0) {
        index = 0;
    }
    if (index>attString.length) {
        index = attString.length;
    }
    
    CGFloat width = 0.f;
    CGFloat height = 0.f;
    
    if (size.width > 0 && size.height > 0) {
        width = size.width;
        height = size.height;
    }
    
    //附件
    NSTextAttachment *attachment = [[NSTextAttachment alloc]init];
    attachment.bounds = CGRectMake(0, 0, width, height);
    attachment.image = image;
    
    //转string
    NSAttributedString * attachStr = [NSAttributedString attributedStringWithAttachment:attachment];

    //插入需求的位置
    [attString insertAttributedString:attachStr atIndex:index];
    
    return attString;
}
           

继续阅读