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];
                    }
                }
            }];
            
        }
目录
相关文章
|
27天前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
54 0
|
4月前
|
JavaScript 前端开发
文本,粘贴事件如何实现,先实现一个小目标,如何存入图片,从本地生成源码,先转成base64,ctrl + v这张图片就显示出来了怎样实现的,Vue可以有方法可以获取粘贴的所有元素,转base64字符串
文本,粘贴事件如何实现,先实现一个小目标,如何存入图片,从本地生成源码,先转成base64,ctrl + v这张图片就显示出来了怎样实现的,Vue可以有方法可以获取粘贴的所有元素,转base64字符串
C++ 流插入和流提取运算符的重载
C++ 流插入和流提取运算符的重载
C++ 流插入和流提取运算符的重载
|
JavaScript 前端开发
|
存储 C++
QTextStream文本流用法(一)
QTextStream文本流用法(一)
|
Python
python编程:合并文本_利用列表或字典将两个通讯录文本合并-7
python编程:合并文本_利用列表或字典将两个通讯录文本合并-7
183 0
|
程序员
圣诞快乐文字拼接代码
圣诞快乐,文字拼接如何实现?来看看我是如何实现的吧~
121 0
圣诞快乐文字拼接代码
Autolisp:利用AuoCAD之Lisp编程案例之自动智能获取所选对象的面积并标注在指定位置
Autolisp:利用AuoCAD之Lisp编程案例之自动智能获取所选对象的面积并标注在指定位置
Autolisp:利用AuoCAD之Lisp编程案例之自动智能获取所选对象的面积并标注在指定位置
|
Python
python编程:合并文本_利用列表或字典将两个通讯录文本合并
python编程:合并文本_利用列表或字典将两个通讯录文本合并
254 0