天天看點

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;
}
           

繼續閱讀