UITextView的attributedText含有NSTextAttachment对象、表情包和普通文本的遍历与组装h5字符串

简介: UITextView的attributedText含有NSTextAttachment对象、表情包和普通文本的遍历与组装h5字符串

UITextView的attributedText含有NSTextAttachment对象、表情包和普通文本的可以遍历。注意:表情包和普通文本被遍历时相似单又被分开。

表情包的插入与移动光标

        NSString *str = getNotNilString([emojiStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]);
        [self.inputTextView.textStorage insertAttributedString:[[NSAttributedString alloc] initWithString:str] atIndex:self.inputTextView.selectedRange.location];
        self.inputTextView.selectedRange = NSMakeRange(self.inputTextView.selectedRange.location+str.length, 0);

使用enumerateAttributesInRange遍历

        NSAttributedString *attributedText = self.inputTextView.attributedText;
        self.model.Body = @"";
        if(!isCommonUnitEmpty(self.inputTextView.text))
        {
            [attributedText enumerateAttributesInRange:NSMakeRange(0, attributedText.length) options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:
             ^(NSDictionary *attributes, NSRange range, BOOL *stop) {
                @strongify(self);
                DYTextAttachment *attachment = [attributes objectForKey:@"NSAttachment"];
                if(attachment)
                {
                    NSLog(@"attributes:%@, range.location:%d,range.length:%d,attachment.description:%@ attachment:%@,", attributes, range.location,range.length,attachment.description, attachment);
                    if([attachment isKindOfClass:[DYTextAttachment class]] && !isCommonUnitEmptyString(attachment.dataFilePath))
                    {
                        if(attachment.dyFileType == DYFileTypeImage)
                        {
                            self.model.Body = [NSString stringWithFormat:@"%@<img src=\"%@\"/>", self.model.Body, attachment.dataFilePath];
                        }
                        else if(attachment.dyFileType == DYFileTypeVideo)
                        {
                            self.model.Body = [NSString stringWithFormat:@"%@<p><video src=\"%@\" controls=\"controls\" style=\"max-width:100%%\"></video></p>", self.model.Body, attachment.dataFilePath];
                        }
                    }
                }
                else
                {
                    NSLog(@"attributes:%@, range.location:%d,range.length:%d, [self.inputTextView.text substringWithRange:range]:%@", attributes, range.location,range.length, [self.inputTextView.text substringWithRange:range]);
                    NSString *inputStr = [self.inputTextView.text substringWithRange:range];
                    if(!isCommonUnitEmptyString(inputStr))
                    {
                        self.model.Body = [NSString stringWithFormat:@"%@%@", self.model.Body, inputStr];
                    }
                }
            }];
            
        }
目录
相关文章
|
1月前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
72 0
|
4月前
|
JavaScript 前端开发
文本,粘贴事件如何实现,先实现一个小目标,如何存入图片,从本地生成源码,先转成base64,ctrl + v这张图片就显示出来了怎样实现的,Vue可以有方法可以获取粘贴的所有元素,转base64字符串
文本,粘贴事件如何实现,先实现一个小目标,如何存入图片,从本地生成源码,先转成base64,ctrl + v这张图片就显示出来了怎样实现的,Vue可以有方法可以获取粘贴的所有元素,转base64字符串
|
6月前
|
移动开发 iOS开发
非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题
非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题
58 1
|
移动开发 Unix Linux
多行文本转成一行的实现方法
多行文本转成一行的实现方法
|
JSON 测试技术 数据格式
JSON字符串直接转换为目标对象,并测试是否是深度转换
JSON字符串直接转换为目标对象,并测试是否是深度转换
264 0
|
存储 索引
JMeter 正则表达式提取器结合ForEach控制器遍历提取变量值
JMeter 正则表达式提取器结合ForEach控制器遍历提取变量值
185 0
|
JavaScript 前端开发 API
我用最蹩脚的方式写了一个「序列帧动画」 🍂
我用最蹩脚的方式写了一个「序列帧动画」 🍂
167 0
|
程序员
圣诞快乐文字拼接代码
圣诞快乐,文字拼接如何实现?来看看我是如何实现的吧~
121 0
圣诞快乐文字拼接代码
|
PHP
PHP数组学习之怎么截取元素片段(两种方式)
在之前的文章《PHP数组学习之怎么去除任意元素》中,我们介绍了使用array_splice()函数删除数组的一个或多个元素的方法。这次我们继续PHP数组的学习,介绍一下截取数组,获取部分元素的方法,感兴趣的朋友可以学习了解一下~ 在之前的学习中,我们了解到截取字符串、获取子串可以使用substr()和mb_substr()。那么如果是截取数组、返回部分数组元素呢?我们要怎么操作?下面给大家介绍两种方法。 方法一:使用array_splice()函数 对的,array_splice()函数!我们知道array_splice()函数可以添加、删除和替换数组元素,怎么又可以截取数组了呢? 那是
545 0