OC 鏈式程式設計實戰(封裝NSMutableAttributedString)

韋家冰發表於2017-12-13

使用例子

        NSString *text= @"說明:\n1、個人業績為實時統計;\n2、獎勵顯示為T+1(當日辦理隔日顯示);\n3、無邀請碼的訂單不在個人業績統計範疇;\n4、如對獎金有疑問,請向上級反饋處理。";
        NSMutableAttributedString *att=[[NSMutableAttributedString alloc]initWithString:text];
        //設定字號14、顏色、行間距
        att.ps_font([UIFont systemFontOfSize:14.0]).ps_color(k_Color_9B9B9B).ps_lineSpacing(2);
        
        //把全部“為”字變成紅色、字間距為10
        [att ps_changeSubStrings:@[@"為"] makeCalculators:^(NSMutableAttributedString *make) {
            make.ps_color([UIColor redColor]).ps_kern(10);
        }];
        
        //把全部“@"個人",@"績"變成綠色、字號19、設定筆畫寬度(中空效果)
        [att ps_changeSubStrings:@[@"個人",@"績"] makeCalculators:^(NSMutableAttributedString *make) {
            make.ps_color([UIColor greenColor]).ps_font([UIFont systemFontOfSize:19]).ps_strokeWidth(4);
        }];
        
        lab.attributedText=att;
複製程式碼

效果

WX20170304-132522@2x.png

直接上程式碼,NSMutableAttributedString屬性太多,程式碼有點長 NSMutableAttributedString+Chain.h


#import <Foundation/Foundation.h>

@interface NSMutableAttributedString (Chain)

/**
 改變某些文字的顏色 並單獨設定其字型
 @param subStrings 想要變色的字元陣列
 @param block   裡面用make.各種想要的設定
 */
- (void)ps_changeSubStrings:(NSArray *)subStrings makeCalculators:(void (^)(NSMutableAttributedString * make))block;

/**
 多個AttributedString連線
 */
- (void)ps_appendAttributedStrings:(NSArray *)attrStrings;
/**
 多個AttributedString連線
 */
+ (NSMutableAttributedString *)ps_appendAttributedStrings:(NSArray *)attrStrings;



#pragma mark -基本設定
// NSFontAttributeName                  設定字型屬性,預設值:字型:Helvetica(Neue) 字號:12
// NSForegroundColorAttributeNam        設定字型顏色,取值為 UIColor物件,預設值為黑色
// NSBackgroundColorAttributeName       設定字型所在區域背景顏色,取值為 UIColor物件,預設值為nil, 透明色
// NSLigatureAttributeName              設定連體屬性,取值為NSNumber 物件(整數),0 表示沒有連體字元,1 表示使用預設的連體字元
// NSKernAttributeName                  設定字元間距,取值為 NSNumber 物件(整數),正值間距加寬,負值間距變窄
// NSStrikethroughStyleAttributeName    設定刪除線,取值為 NSNumber 物件(整數)
// NSStrikethroughColorAttributeName    設定刪除線顏色,取值為 UIColor 物件,預設值為黑色
// NSUnderlineStyleAttributeName        設定下劃線,取值為 NSNumber 物件(整數),列舉常量 NSUnderlineStyle中的值,與刪除線類似
// NSUnderlineColorAttributeName        設定下劃線顏色,取值為 UIColor 物件,預設值為黑色
// NSStrokeWidthAttributeName           設定筆畫寬度,取值為 NSNumber 物件(整數),負值填充效果,正值中空效果
// NSStrokeColorAttributeName           填充部分顏色,不是字型顏色,取值為 UIColor 物件
// NSShadowAttributeName                設定陰影屬性,取值為 NSShadow 物件
// NSTextEffectAttributeName            設定文字特殊效果,取值為 NSString 物件,目前只有圖版印刷效果可用:
// NSBaselineOffsetAttributeName        設定基線偏移值,取值為 NSNumber (float),正值上偏,負值下偏
// NSObliquenessAttributeName           設定字形傾斜度,取值為 NSNumber (float),正值右傾,負值左傾
// NSExpansionAttributeName             設定文字橫向拉伸屬性,取值為 NSNumber (float),正值橫向拉伸文字,負值橫向壓縮文字
// NSWritingDirectionAttributeName      設定文字書寫方向,從左向右書寫或者從右向左書寫
// NSVerticalGlyphFormAttributeName     設定文字排版方向,取值為 NSNumber 物件(整數),0 表示橫排文字,1 表示豎排文字
// NSLinkAttributeName                  設定連結屬性,點選後呼叫開啟指定URL地址
// NSAttachmentAttributeName            設定文字附件,取值為NSTextAttachment物件,常用於文字圖片混排


/**
 .color(文字顏色)
 */
- (NSMutableAttributedString *(^)(UIColor *))ps_color;

/**
 .ps_bgColor(背景顏色)
 */
- (NSMutableAttributedString *(^)(UIColor *))ps_bgColor;

/**
 .font(字型)
 */
- (NSMutableAttributedString *(^)(UIFont *))ps_font;

/**
 .ps_offset(偏移量) 正值上偏,負值下偏
 */
- (NSMutableAttributedString *(^)(CGFloat))ps_baselineOffset;

/**
 .ps_ligature(連體符)設定連體屬性,0 表示沒有連體字元,1 表示使用預設的連體字元
 */
- (NSMutableAttributedString *(^)(NSInteger))ps_ligature;


/**
 .ps_kern(字間距),取值為 NSNumber 物件(整數),正值間距加寬,負值間距變窄
 */
- (NSMutableAttributedString *(^)(NSInteger))ps_kern;

/**
 .ps_strikethrough(刪除線),取值為 NSNumber 物件(整數)
 */
- (NSMutableAttributedString *(^)(NSUnderlineStyle))ps_strikethrough;

/**
 NSStrikethroughColorAttributeName  設定刪除線顏色,取值為 UIColor 物件,預設值為黑色
 */
- (NSMutableAttributedString *(^)(UIColor *))ps_strikethroughColor;

/**
 設定下劃線,取值為 NSNumber 物件(整數),列舉常量 NSUnderlineStyle中的值,與刪除線類似
 */
- (NSMutableAttributedString *(^)(NSUnderlineStyle))ps_underlineStyle;

/**
 NSUnderlineColorAttributeName      設定下劃線顏色,取值為 UIColor 物件,預設值為黑色
 */
- (NSMutableAttributedString *(^)(UIColor *))ps_underlineColor;

/**
 NSStrokeWidthAttributeName 設定筆畫寬度,取值為 NSNumber 物件(整數),負值填充效果,正值中空效果
 */
- (NSMutableAttributedString *(^)(NSInteger))ps_strokeWidth;

/**
 NSStrokeColorAttributeName 填充部分顏色,不是字型顏色,取值為 UIColor 物件
 */
- (NSMutableAttributedString *(^)(UIColor *))ps_strokeColor;

/**
 NSShadowAttributeName 設定陰影屬性,取值為 NSShadow 物件
 */
- (NSMutableAttributedString *(^)(NSShadow *))ps_shadow;

/**
 NSTextEffectAttributeName 設定文字特殊效果,取值為 NSString 物件,目前只有圖版印刷效果可用:
 */
- (NSMutableAttributedString *(^)(NSString *))ps_textEffect;

/**
 NSObliquenessAttributeName設定字形傾斜度,取值為 NSNumber (float),正值右傾,負值左傾
 */
- (NSMutableAttributedString *(^)(CGFloat))ps_obliqueness;

/**
 NSExpansionAttributeName 設定文字橫向拉伸屬性,取值為 NSNumber (float),正值橫向拉伸文字,負值橫向壓縮文字
 */
- (NSMutableAttributedString *(^)(CGFloat))ps_expansion;

/**
 NSWritingDirectionAttributeName 設定文字書寫方向NSWritingDirection
 */
- (NSMutableAttributedString *(^)(NSWritingDirection))ps_writingDirection;

/**
 NSVerticalGlyphFormAttributeName 設定文字排版方向,取值為 NSNumber 物件(整數),0 表示橫排文字,1 表示豎排文字
 */
- (NSMutableAttributedString *(^)(NSInteger))ps_verticalGlyph;

/**
 NSLinkAttributeName 設定連結屬性,點選後呼叫開啟指定URL地址
 */
- (NSMutableAttributedString *(^)(NSURL *))ps_linkAttribute;

#pragma mark -NSParagraphStyleAttributeName 設定文字段落排版格式
//alignment             //對齊方式
//lineSpacing              //行距
//paragraphSpacing         //段距
//firstLineHeadIndent     //首行縮排
//headIndent             //縮排
//tailIndent              //尾部縮排
//lineBreakMode          //斷行方式
//maximumLineHeight      //最大行高
//minimumLineHeight      //最低行高
//paragraphSpacingBefore  //段首空間
//baseWritingDirection      //句子方向
//lineHeightMultiple      //可變行高,乘因數。
//hyphenationFactor     //連字元屬性

/**
 .alignment(對齊)
 */
- (NSMutableAttributedString *(^)(NSTextAlignment))ps_alignment;

/**
 .lineSpacing(調整行間距)
 */
- (NSMutableAttributedString *(^)(CGFloat))ps_lineSpacing;

/**
 .paragraphSpacing(調整段間距)
 */
- (NSMutableAttributedString *(^)(CGFloat))ps_paragraphSpacing;

/**
 首行縮排
 */
- (NSMutableAttributedString *(^)(CGFloat ))ps_firstLineHeadIndent;

/**
 縮排
 */
- (NSMutableAttributedString *(^)(CGFloat ))ps_headIndent;

/**
 尾部縮排
 */
- (NSMutableAttributedString *(^)(CGFloat ))ps_tailIndent;

/**
 斷行方式
 */
- (NSMutableAttributedString *(^)(NSLineBreakMode ))ps_lineBreakMode;

/**
 最大行高
 */
- (NSMutableAttributedString *(^)(CGFloat ))ps_maximumLineHeight;

/**
 最低行高
 */
- (NSMutableAttributedString *(^)(CGFloat ))ps_minimumLineHeight;

/**
 句子方向
 */
- (NSMutableAttributedString *(^)(NSWritingDirection ))ps_baseWritingDirection;

/**
 可變行高,乘因數。
 */
- (NSMutableAttributedString *(^)(CGFloat ))ps_lineHeightMultiple;

/**
 連字元屬性。
 */
- (NSMutableAttributedString *(^)(CGFloat ))ps_hyphenationFactor;

@end

複製程式碼

NSMutableAttributedString+Chain.m

#import "NSMutableAttributedString+Chain.h"
#import <objc/runtime.h>

@interface NSMutableAttributedString ()
@property(nonatomic, assign) NSRange changeRange;
@end

@implementation NSMutableAttributedString (Chain)

/**
 改變某些文字的顏色 並單獨設定其字型
 @param subStrings 想要變色的字元陣列
 @param block   裡面用make.各種想要的設定
 */
- (void)ps_changeSubStrings:(NSArray *)subStrings makeCalculators:(void (^)(NSMutableAttributedString * make))block{
    
    for (NSString *rangeStr in subStrings) {
        
        NSMutableArray *array = [self ps_getRangeWithTotalString:self.string SubString:rangeStr];
        for (NSNumber *rangeNum in array) {
            //設定修改range
            self.changeRange = [rangeNum rangeValue];
            //block 鏈式呼叫
            block(self);
        }
    }
    //設定為空
    self.changeRange=NSMakeRange(0, 0);
}

/**
 多個AttributedString連線
 */
- (void)ps_appendAttributedStrings:(NSArray *)attrStrings{
    
    for (NSAttributedString *att in attrStrings) {
        
        [self appendAttributedString:att];
    }
}
/**
 多個AttributedString連線
 */
+ (NSMutableAttributedString *)ps_appendAttributedStrings:(NSArray *)attrStrings{
    
    NSMutableAttributedString *att=[NSMutableAttributedString new];
    [att ps_appendAttributedStrings:attrStrings];
    return att;
    
}

#pragma mark - Private Methods
/**
 *  獲取某個字串中子字串的位置陣列
 *  @param totalString 總的字串
 *  @param subString   子字串
 *  @return 位置陣列
 */
- (NSMutableArray *)ps_getRangeWithTotalString:(NSString *)totalString SubString:(NSString *)subString {
    
    
    
    if (subString == nil && [subString isEqualToString:@""]) {
        return nil;
    }
    NSMutableArray *arrayRanges = [NSMutableArray array];
    
    //方法一、NSRegularExpression

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:subString options:0 error:nil];
    NSArray *matches = [regex matchesInString:totalString options:0 range:NSMakeRange(0, totalString.length)];
    
    for(NSTextCheckingResult *result in [matches objectEnumerator]){
        NSRange matchRange = [result range];
        [arrayRanges addObject:[NSNumber valueWithRange:matchRange]];
    }
    return arrayRanges;
    
    //方法二、[NSString componentsSeparatedByString:]分解得到陣列,在用陣列搗鼓出ranges
    /*
    NSArray *array=[totalString componentsSeparatedByString:subString];
    NSInteger d=0;
    for (int i=0; i<array.count-1; i++) {
        
        NSString *string=array[i];
        NSRange range=NSMakeRange(d+string.length, subString.length);
        d=NSMaxRange(range);
        [arrayRanges addObject:[NSNumber valueWithRange:range]];
        
    }
    return arrayRanges;
     */
    
    
    //方法三、rangeOfString 查詢
    /*
    NSRange searchRange = NSMakeRange(0, [totalString length]);
    NSRange range=NSMakeRange(0, 0);
    while ((range = [totalString rangeOfString:subString options:0 range:searchRange]).location != NSNotFound) {
        [arrayRanges addObject:[NSNumber valueWithRange:range]];
        searchRange = NSMakeRange(NSMaxRange(range), searchRange.length - NSMaxRange(range));
    }
    return arrayRanges;
     */

}

- (void)ps_addAttribute:(NSString *)name value:(id)value{
    
    NSRange range=[self range];
    
    if (range.length>0) {
        
        [self addAttribute:name value:value range:range];
    }else{
        NSLog(@"AttributedString的string為空,注意!!!");
    }
    
    
}

//獲取有效的range
- (NSRange)range{
    
    NSRange range=NSMakeRange(0, 0);
    NSString *string=self.string;
    if (string&&string.length>0) {
        
        if (self.changeRange.length>0&&NSMaxRange(self.changeRange)<=string.length) {
            //如果是需要修改的字元,就使用changeRange
            range=self.changeRange;
        }else{
            //設定全部字串
            range=NSMakeRange(0, string.length);
        }
    }
    return range;
}

- (NSMutableParagraphStyle *)ps_paragraphStyle{
    
    NSRange range=[self range];
    if (range.length>0) {
        
        NSDictionary *dic = [self attributesAtIndex:0 effectiveRange:&range];
        NSMutableParagraphStyle *paragraphStyle=dic[@"NSParagraphStyle"];
        
        //如果字串裡面沒有paragraphStyle,new一個新的
        if (!paragraphStyle) {
            paragraphStyle=[[NSMutableParagraphStyle alloc]init];
        }
        return paragraphStyle;
    }else{
        NSLog(@"AttributedString的string為空,注意!!!");
        return nil;
    }
}

#pragma mark -ChangeRange的get、set

-(void)setChangeRange:(NSRange)changeRange{
    objc_setAssociatedObject(self, @selector(changeRange), [NSNumber valueWithRange:changeRange], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(NSRange)changeRange{
    
    NSNumber *rangeNum = objc_getAssociatedObject(self, @selector(changeRange));
    NSRange range = [rangeNum rangeValue];
    return range;
}

#pragma mark - 設定各種配置引數
//顏色
- (NSMutableAttributedString *(^)(UIColor *))ps_color{
    
    return ^NSMutableAttributedString *(UIColor *obj) {
        [self ps_addAttribute:NSForegroundColorAttributeName  value:obj];
        return self;
    };
}
/**
 .ps_bgColor(背景顏色)
 */
- (NSMutableAttributedString *(^)(UIColor *))ps_bgColor{
    
    return ^NSMutableAttributedString *(UIColor *obj) {
        [self ps_addAttribute:NSBackgroundColorAttributeName  value:obj];
        return self;
    };
}

//字型
- (NSMutableAttributedString *(^)(UIFont *))ps_font{
    return ^NSMutableAttributedString *(UIFont *obj) {
        [self ps_addAttribute:NSFontAttributeName value:obj];
        return self;
    };
}

//偏移量
- (NSMutableAttributedString *(^)(CGFloat ))ps_baselineOffset{
    
    return ^NSMutableAttributedString *(CGFloat obj) {
        [self ps_addAttribute:NSBaselineOffsetAttributeName value:@(obj)];
        return self;
    };
}

//.ps_ligature(連體符)設定連體屬性,0 表示沒有連體字元,1 表示使用預設的連體字元
- (NSMutableAttributedString *(^)(NSInteger))ps_ligature{
    
    return ^NSMutableAttributedString *(NSInteger obj) {
        [self ps_addAttribute:NSLigatureAttributeName value:@(obj)];
        return self;
    };
}

//.ps_kern(字間距),取值為 NSNumber 物件(整數),正值間距加寬,負值間距變窄
- (NSMutableAttributedString *(^)(NSInteger))ps_kern{
    return ^NSMutableAttributedString *(NSInteger obj) {
        [self ps_addAttribute:NSKernAttributeName value:@(obj)];
        return self;
    };
}

//.ps_strikethrough(刪除線),NSUnderlineStyle
- (NSMutableAttributedString *(^)(NSUnderlineStyle))ps_strikethrough{
    return ^NSMutableAttributedString *(NSUnderlineStyle obj) {
        [self ps_addAttribute:NSStrikethroughStyleAttributeName value:@(obj)];
        return self;
    };
}

//NSStrikethroughColorAttributeName  設定刪除線顏色,取值為 UIColor 物件,預設值為黑色
- (NSMutableAttributedString *(^)(UIColor *))ps_strikethroughColor{
    return ^NSMutableAttributedString *(UIColor *obj) {
        [self ps_addAttribute:NSStrikethroughStyleAttributeName value:obj];
        return self;
    };
}

//設定下劃線,取值為 NSNumber 物件(整數),列舉常量 NSUnderlineStyle中的值,與刪除線類似
- (NSMutableAttributedString *(^)(NSUnderlineStyle))ps_underlineStyle{
    return ^NSMutableAttributedString *(NSUnderlineStyle obj) {
        [self ps_addAttribute:NSUnderlineStyleAttributeName value:@(obj)];
        return self;
    };
}

//NSUnderlineColorAttributeName 設定下劃線顏色,取值為 UIColor 物件,預設值為黑色
- (NSMutableAttributedString *(^)(UIColor *))ps_underlineColor{
    return ^NSMutableAttributedString *(UIColor *obj) {
        [self ps_addAttribute:NSUnderlineColorAttributeName value:obj];
        return self;
    };
}

//NSStrokeWidthAttributeName 設定筆畫寬度,取值為 NSNumber 物件(整數),負值填充效果,正值中空效果
- (NSMutableAttributedString *(^)(NSInteger))ps_strokeWidth{
    return ^NSMutableAttributedString *(NSInteger obj) {
        [self ps_addAttribute:NSStrokeWidthAttributeName value:@(obj)];
        return self;
    };
}

//NSStrokeColorAttributeName 填充部分顏色,不是字型顏色,取值為 UIColor 物件
- (NSMutableAttributedString *(^)(UIColor *))ps_strokeColor{
    return ^NSMutableAttributedString *(UIColor *obj) {
        [self ps_addAttribute:NSStrokeColorAttributeName value:obj];
        return self;
    };
}

//NSShadowAttributeName 設定陰影屬性,取值為 NSShadow 物件
- (NSMutableAttributedString *(^)(NSShadow *))ps_shadow{
    return ^NSMutableAttributedString *(NSShadow *obj) {
        [self ps_addAttribute:NSShadowAttributeName value:obj];
        return self;
    };
}

//NSTextEffectAttributeName 設定文字特殊效果,取值為 NSString 物件,目前只有圖版印刷效果可用:
- (NSMutableAttributedString *(^)(NSString *))ps_textEffect{
    return ^NSMutableAttributedString *(NSString *obj) {
        [self ps_addAttribute:NSTextEffectAttributeName value:obj];
        return self;
    };
}

//NSObliquenessAttributeName設定字形傾斜度,取值為 NSNumber (float),正值右傾,負值左傾
- (NSMutableAttributedString *(^)(CGFloat))ps_obliqueness{
    return ^NSMutableAttributedString *(CGFloat obj) {
        [self ps_addAttribute:NSObliquenessAttributeName value:@(obj)];
        return self;
    };
}

//NSExpansionAttributeName 設定文字橫向拉伸屬性,取值為 NSNumber (float),正值橫向拉伸文字,負值橫向壓縮文字
- (NSMutableAttributedString *(^)(CGFloat))ps_expansion{
    return ^NSMutableAttributedString *(CGFloat obj) {
        [self ps_addAttribute:NSExpansionAttributeName value:@(obj)];
        return self;
    };
}

//NSWritingDirectionAttributeName 設定文字書寫方向NSWritingDirection
- (NSMutableAttributedString *(^)(NSWritingDirection))ps_writingDirection{
    return ^NSMutableAttributedString *(NSWritingDirection obj) {
        [self ps_addAttribute:NSWritingDirectionAttributeName value:@(obj)];
        return self;
    };
}

//NSVerticalGlyphFormAttributeName 設定文字排版方向,取值為 NSNumber 物件(整數),0 表示橫排文字,1 表示豎排文字
- (NSMutableAttributedString *(^)(NSInteger))ps_verticalGlyph{
    return ^NSMutableAttributedString *(NSInteger obj) {
        [self ps_addAttribute:NSVerticalGlyphFormAttributeName value:@(obj)];
        return self;
    };
}

//NSLinkAttributeName 設定連結屬性,點選後呼叫開啟指定URL地址
- (NSMutableAttributedString *(^)(NSURL *))ps_linkAttribute{
    return ^NSMutableAttributedString *(NSURL *obj) {
        [self ps_addAttribute:NSLinkAttributeName value:obj];
        return self;
    };
}

//NSAttachmentAttributeName 設定文字附件,取值為NSTextAttachment物件,常用於文字圖片混排
/*
 NSTextAttachment *textAttachment01 = [[NSTextAttachment alloc] init];
 textAttachment01.image = [UIImage imageNamed: @"10000.jpeg"];  //設定圖片源
 textAttachment01.bounds = CGRectMake(0, 0, 30, 30);          //設定圖片位置和大小
 NSMutableAttributedString *attrStr01 = [[NSMutableAttributedString alloc] initWithString: originStr];
 [attrStr01 addAttribute: NSFontAttributeName value: [UIFont systemFontOfSize: 25] range: NSMakeRange(0, originStr.length)];
 NSAttributedString *attrStr11 = [NSAttributedString attributedStringWithAttachment: textAttachment01];
 [attrStr01 insertAttributedString: attrStr11 atIndex: 2];  //NSTextAttachment佔用一個字元長度,插入後原字串長度增加1
 _label01.attributedText = attrStr01;
 */

#pragma mark -NSParagraphStyleAttributeName 設定文字段落排版格式
//對齊
- (NSMutableAttributedString *(^)(NSTextAlignment))ps_alignment{
    return ^NSMutableAttributedString *(NSTextAlignment obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.alignment=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//行間距
- (NSMutableAttributedString *(^)(CGFloat ))ps_lineSpacing{
    return ^NSMutableAttributedString *(CGFloat obj) {
        
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.lineSpacing=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        
        return self;
    };
}

//段間距
- (NSMutableAttributedString *(^)(CGFloat ))ps_paragraphSpacing{
    return ^NSMutableAttributedString *(CGFloat obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.paragraphSpacing=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//首行縮排
- (NSMutableAttributedString *(^)(CGFloat ))ps_firstLineHeadIndent{
    return ^NSMutableAttributedString *(CGFloat obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.firstLineHeadIndent=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//縮排
- (NSMutableAttributedString *(^)(CGFloat ))ps_headIndent{
    return ^NSMutableAttributedString *(CGFloat obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.headIndent=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//尾部縮排
- (NSMutableAttributedString *(^)(CGFloat ))ps_tailIndent{
    return ^NSMutableAttributedString *(CGFloat obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.tailIndent=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//斷行方式
- (NSMutableAttributedString *(^)(NSLineBreakMode ))ps_lineBreakMode{
    return ^NSMutableAttributedString *(NSLineBreakMode obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.lineBreakMode=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//最大行高
- (NSMutableAttributedString *(^)(CGFloat ))ps_maximumLineHeight{
    return ^NSMutableAttributedString *(CGFloat obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.maximumLineHeight=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//最低行高
- (NSMutableAttributedString *(^)(CGFloat ))ps_minimumLineHeight{
    return ^NSMutableAttributedString *(CGFloat obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.minimumLineHeight=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//句子方向
- (NSMutableAttributedString *(^)(NSWritingDirection ))ps_baseWritingDirection{
    return ^NSMutableAttributedString *(NSWritingDirection obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.baseWritingDirection=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//可變行高,乘因數
- (NSMutableAttributedString *(^)(CGFloat ))ps_lineHeightMultiple{
    return ^NSMutableAttributedString *(CGFloat obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.lineHeightMultiple=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}

//連字元屬性
- (NSMutableAttributedString *(^)(CGFloat ))ps_hyphenationFactor{
    return ^NSMutableAttributedString *(CGFloat obj) {
        NSMutableParagraphStyle *style=[self ps_paragraphStyle];
        style.hyphenationFactor=obj;
        [self ps_addAttribute:NSParagraphStyleAttributeName value:style];
        return self;
    };
}
@end
複製程式碼

相關文章