UITextView富文本

#import "HWEmotionTextView.h"

#import "HWEmotion.h"

#import "HWEmotionAttachment.h"


@implementation HWEmotionTextView


- (id)initWithFrame:(CGRect)frame

{

    self = [superinitWithFrame:frame];

    if (self) {

        // Initialization code

    }

    return self;

}


- (void)insertEmotion:(HWEmotion *)emotion

{

    if (emotion.code) {

        // insertText : 将文字插入到光标所在的位置

        [self insertText:emotion.code.emoji];

    } else if (emotion.png) {

        // 加载图片

        NSTextAttachment *attch = [[NSTextAttachmentalloc]init];

        attch.image = [UIImageimageNamed:emotion.png];

//        HWEmotionAttachment *attch = [[HWEmotionAttachmentalloc] init];

//        attch.emotion = emotion;(用来替换上边两句)

        CGFloat attchWH = self.font.lineHeight;

        attch.bounds = CGRectMake(0, -4, attchWH, attchWH);

        

        // 根据附件创建一个属性文字

        NSAttributedString *imageStr = [NSAttributedStringattributedStringWithAttachment:attch];

        

        // 插入属性文字到光标位置

        [self insertAttributeText:imageStr];

        

    }

}


/**

 selectedRange :

 1.本来是用来控制textView的文字选中范围

 2.如果selectedRange.length0selectedRange.location就是textView的光标位置

 

 关于textView文字的字体

 1.如果是普通文字(text),文字大小由textView.font控制

 2.如果是属性文字(attributedText),文字大小不受textView.font控制,应该利用NSMutableAttributedString- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;方法设置字体

 **/


- (void)insertAttributeText:(NSAttributedString *)text

{

   

 NSMutableAttributedString *attributedText = [[NSMutableAttributedStringalloc]init];

    // 拼接之前的文字(图片和普通文字)

    [attributedText appendAttributedString:self.attributedText];

    

    // 拼接图片

    NSUInteger loc =self.selectedRange.location;

//    [attributedText insertAttributedString:text atIndex:loc];

    [attributedText replaceCharactersInRange:self.selectedRangewithAttributedString:text];


    

    // 设置字体

    [attributedText addAttribute:NSFontAttributeNamevalue:self.fontrange:NSMakeRange(0, text.length)];

    

    self.attributedText = attributedText;

    

    // 移除光标到表情的后面

    self.selectedRange =NSMakeRange(loc +1,0);


}


- (NSString *)fullText

{

    NSMutableString *fullText = [NSMutableStringstring];

    

    // 遍历所有的属性文字(图片、emoji、普通文字)

    [self.attributedTextenumerateAttributesInRange:NSMakeRange(0,self.attributedText.length)options:0usingBlock:^(NSDictionary *attrs,NSRange range,BOOL *stop) {

        // 如果是图片表情

        HWEmotionAttachment *attch = attrs[@"NSAttachment"];

        if (attch) { // 图片

            [fullText appendString:attch.emotion.chs];

        } else { // emoji、普通文本

            // 获得这个范围内的文字

            NSAttributedString *str = [self.attributedTextattributedSubstringFromRange:range];

            [fullText appendString:str.string];

        }

    }];

    

    return fullText;

}


/**

 selectedRange :

 1.本来是用来控制textView的文字选中范围

 2.如果selectedRange.length0selectedRange.location就是textView的光标位置

 

 关于textView文字的字体

 1.如果是普通文字(text),文字大小由textView.font控制

 2.如果是属性文字(attributedText),文字大小不受textView.font控制,应该利用NSMutableAttributedString- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;方法设置字体

 **/

@end



#import "HWEmotionAttachment.h"

#import "HWEmotion.h"


@implementation HWEmotionAttachment

- (void)setEmotion:(HWEmotion *)emotion

{

    _emotion = emotion;

    

    self.image = [UIImageimageNamed:emotion.png];

}



/**

 *  删除文字

 */

- (void)emotionDidDelete

{

    [self.textViewdeleteBackward];

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值