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

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UITextView是UIKit框架中的一个控件,可以用来显示和编辑长文本。而富文本则是指带有丰富样式的文本,可以设置文字的字体、颜色、大小、间距、行高等属性。 要在UITextView中实现富文本,首先需要创建一个NSAttributedString对象,并通过NSMutableAttributedString来设置文字的样式。NSAttributedString是不可变的,而NSMutableAttributedString可以修改和添加样式。 创建NSMutableAttributedString对象后,可以使用其方法来设置文字的样式,比如设置字体可以使用NSFontAttributeName属性,设置颜色可以使用NSForegroundColorAttributeName属性,设置字号可以使用NSFontAttributeName属性,设置段落样式可以使用NSParagraphStyleAttributeName属性等等。 设置完成后,就可以将NSMutableAttributedString对象赋值给UITextViewattributedText属性,以实现富文本的显示。 例如,我们想将某个UITextView的文字样式设置为红色、字号为20、字体为粗体,可以按如下方式设置: ``` NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"这是富文本"]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, attributedString.length)]; [attributedString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:20] range:NSMakeRange(0, attributedString.length)]; textView.attributedText = attributedString; ``` 通过上述代码,就可以在UITextView中显示带有红色、字号为20、字体为粗体的文字。 除了以上示例外,UITextView还支持更多的富文本样式设置,根据具体需求,可以设置更多的属性来实现更丰富的文本效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值