TextKit文字表情混排

将文本和表情标签分开,放到数组里面

- (void)getImageRange:(NSString *)message array:(NSMutableArray *)array
{
    NSRange range=[message rangeOfString:kImageBeginMark];
    NSRange range1=[message rangeOfString:kimageEndMark];
    //判断当前字符串是否还有表情的标志。
    if (range.length>0 && range1.length>0)
    {
        if (range.location > 0)
        {
            [array addObject:[message substringToIndex:range.location]];
            [array addObject:[message substringWithRange:NSMakeRange(range.location, range1.location+1-range.location)]];
            NSString *str=[message substringFromIndex:range1.location+1];
            [self getImageRange:str array:array];
        }
        else
        {
            NSString *nextstr=[message substringWithRange:NSMakeRange(range.location, range1.location+1-range.location)];
            //排除文字是“”的
            if (![nextstr isEqualToString:@""])
            {
                [array addObject:nextstr];
                NSString *str=[message substringFromIndex:range1.location+1];
                [self getImageRange:str array:array];
            }
            else
            {
                return;
            }
        }
    }
    else if (message != nil)
    {
        [array addObject:message];
    }
}

创建

- (id)initWithText:(NSString *)text
{
    NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
    paragraph.lineSpacing = 4;
    paragraph.lineBreakMode = NSLineBreakByCharWrapping;
    
    NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:16],
                                 NSParagraphStyleAttributeName : paragraph};
    
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@""];
    
    NSMutableArray *array = [[NSMutableArray alloc] init];
    [self getImageRange:text array:array];
    
    for (NSString *item in array)
    {
        if ([item hasPrefix:kImageBeginMark] && [item hasSuffix:kimageEndMark])
        {
            NSTextAttachment *textAttachment = [[NSTextAttachment alloc] initWithData:nil ofType:nil];
            [textAttachment setImage:[UIImage imageNamed:item]];
            [textAttachment setBounds:CGRectMake(0, -5, 25, 25)];
        
            NSAttributedString *attrStr = [NSAttributedString attributedStringWithAttachment:textAttachment];
            [string appendAttributedString:attrStr];
        }
        else
        {
            NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:item attributes:attributes];
            [string appendAttributedString:attrStr];
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 7,763评论 0 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • 2017.02.22 可以练习,每当这个时候,脑袋就犯困,我这脑袋真是神奇呀,一说让你做事情,你就犯困,你可不要太...
    Carden阅读 5,235评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,115评论 25 709
  • 本周三(04.12)由深圳得到俱乐部发起并组织的行业话题探讨——“我心中的民宿”,在深圳较场尾精致客栈“时光里”成...
    武明Ray阅读 4,202评论 0 1

友情链接更多精彩内容