例如微博表情添加到textView中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了例如微博表情添加到textView中相关的知识,希望对你有一定的参考价值。

第一步:外界需要传表情按钮点击时候的数据过来

- (void)publishTextViewWith:(YSWeiBoEmotion *)emotion {

    if (emotion.code)  {

        [self insertText:emotion.code.emoji];// 把emoji表情的16进制编码转为文字

    }

    else if (emotion.png)// 表情的png图片名

    {

//    其实只是使用NSTextAttachment将想要插入的图片作为一个字符处理,转换成NSAttributedString,然后UITextView直接进行渲染就搞定了。上面的代码是初始化一个NSTextAttachment,然后set一下image属性,也可以使用NSTextAttachment的init(data contentData: NSData?, ofType uti: String?)方法来设置图片。

//  转换为NSAttributedString

        NSTextAttachment *attachment = [[NSTextAttachment alloc] init];

        attachment.image = [UIImage imageNamed:emotion.png];// 获取图片名字

        CGFloat attchWH = self.font.lineHeight;

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

        NSAttributedString *attritedString = [NSAttributedString attributedStringWithAttachment:attachment];

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

        [self insertAttributeText:attritedString];//??????

    }

}

把NSAttributedString拼接图片

- (void)insertAttributeText:(NSAttributedString *)text

{

    NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] init];

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

    [attributedText appendAttributedString:self.attributedText];

    // 拼接图片

    NSUInteger loc = self.selectedRange.location;

    [attributedText insertAttributedString:text atIndex:loc];

     self.attributedText = attributedText;

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

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

}

把把emoji表情的16进制编码转为文字

这里定义一个宏

#define EmojiCodeToSymbol(c) ((((0x808080F0 | (c & 0x3F000) >> 4) | (c & 0xFC0) << 10) | (c & 0x1C0000) << 18) | (c & 0x3F) << 24)

 + (NSString *)emojiWithIntCode:(int)intCode {

    int symbol = EmojiCodeToSymbol(intCode);

    NSString *string = [[NSString alloc] initWithBytes:&symbol length:sizeof(symbol) encoding:NSUTF8StringEncoding];

    if (string == nil) {

        string = [NSString stringWithFormat:@"%C", (unichar)intCode];

    }

    return string;

}

- (NSString *)emoji {

    return [NSString emojiWithStringCode:[NSString stringWithFormat:@"%@",self]];

}

 + (NSString *)emojiWithStringCode:(NSString *)stringCode {

    char *charCode = (char *)stringCode.UTF8String;

    int intCode = (int)strtol(charCode, NULL, 16);

    return [self emojiWithIntCode:intCode];

}

 

以上是关于例如微博表情添加到textView中的主要内容,如果未能解决你的问题,请参考以下文章

新浪微博客户端(41)-切换表情键盘

IOS开发之显示微博表情

例如微博中的表情选择排布

java 添加指向TextView的链接。 Linkify。字体:https://stackoverflow.com/questions/4746293/android-linkify-textvie

新浪微博客户端(48)-添加删除按钮到表情键盘

TextView,EditText中添加不同颜色的文字