背景:在实现textView的富文本时,如果添加一张图片后,如果直接发送textView的内容时,图片会被字符串“\U0000fffc”替换。

问题:如何删除“\U0000fffc”字符串;如何替换textView中图片的字符串;textView添加完图片后,之前设置的textView的属性被初始化了,怎么办?

方法:

(1)对于第一个问题,百度到的答案如下:

NSString *codeString = @"\uFFFC";
NSString *msg=[msg stringByReplacingOccurrencesOfString:codeString withString:@""];

这个方法,试了之后,就可以的。

(2)基于textView的图片替换,一个个人觉得比较合适的方式如下:

因为textView添加图片时,用的是 NSTextAttachment 控件,所以,基于这个方法下,
/**
  将富文本转换为带有图片标志的纯文本
  sysmbol: 是图片的标志的字符串,例如:[图片]  
  attributeString: 富文本字符串
*/
- (NSString *)textStringWithSymbol:(NSString *)symbol attributeString:(NSAttributedString *)attributeString{
NSString *string = attributeString.string;
//最终纯文本
NSMutableString *textString = [NSMutableString stringWithString:string];
//替换下标的偏移量
__block NSUInteger base = 0; //遍历
[attributeString enumerateAttribute:NSAttachmentAttributeName inRange:NSMakeRange(0, attributeString.length)
options:0
usingBlock:^(id value, NSRange range, BOOL *stop) {
//检查类型是否是自定义NSTextAttachment类
if (value && [value isKindOfClass:[NSTextAttachment class]]) {
//替换
[textString replaceCharactersInRange:NSMakeRange(range.location + base, range.length) withString:symbol];
//增加偏移量
base += (symbol.length - 1);
//将富文本中最终确认的照片取出来
NSTextAttachment *attachmentImg = (NSTextAttachment *)value;
[self.mutImgArray addObject:attachmentImg.image];
}
}]; return textString;
}

(3)textView添加完图片后,之前设置的textView的属性被初始化了。这个问题的意思是,如果textView的字体大小设置为18,颜色为紫色;添加完图片后,textView的字体大小为14,字体颜色为黑色(textView自带的效果);原因不详,解决方法是,设置完图片后,对textView的属性重新设置。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissViewControllerAnimated:YES completion:^{
UIImage * img = [info objectForKey:UIImagePickerControllerOriginalImage];
[self uploadPicture:img];
NSTextAttachment* textAttachment = [[NSTextAttachment alloc] init];
textAttachment.image = img;
textAttachment.bounds = CGRectMake(0, 0, self.view.frame.size.width - 28, [self getImgHeightWithImg:img]);
NSAttributedString* imageAttachment = [NSAttributedString attributedStringWithAttachment:textAttachment];
NSMutableAttributedString *attriStr = [_textView.attributedText mutableCopy];
[attriStr appendAttributedString:imageAttachment]; _textView.attributedText = attriStr; //-------对textView的属性重新设置
_textView.textColor = [UIColor purpleColor];
_textView.font = [UIFont systemFontOfSize:18];

}];
}

删除字符串中的"\U0000fffc"数据 textView添加图片 以及添加后属性失效的解决的更多相关文章

  1. JS中删除字符串中的空格

    问题描述:         在进行字符串操作时,由于字符串中存在较多的空格,因此需要考虑取消字符串中的空格 问题解决:       (1)删除字符串中的前导空格(字符串的前面的空格): 注意:这里使用 ...

  2. jst通用删除数组中重复的值和删除字符串中重复的字符

    以下内容属于个人原创,转载请注明出处,非常感谢! 删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景.还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符 ...

  3. php实现 删除字符串中出现次数最少的字符

    php实现  删除字符串中出现次数最少的字符 一.总结 一句话总结:数组排序是改变数组的,而其它函数一般不改变原数据,比如str_replace(); 1.单案例测试通过而多案例测试不通过怎么办? 检 ...

  4. C# 删除字符串中的中文

    /// <summary> /// 删除字符串中的中文 /// </summary> public static string Delete中文(string str) { s ...

  5. PAT 字符串-02 删除字符串中的子串

    /* 2 *PAT 字符串-02 删除字符串中的子串 3 *2015-08-09 4 作者:flx413 5 */ #include<stdio.h> #include<string ...

  6. 删除字符串中多余的空白字符和空行(C语言实现)

    要求:处理一个字符串,删除字符串中多余的空格.水平制表符和空行,并满足下列要求: (1)对原字符串只能进行一次扫描.(2)不允许申请新的空间.(3)处理后的字符串的首尾不能有空格.制表符和空行.(4) ...

  7. 算法基础:删除字符串中出现次数最少的字符(Golang实现)

    描写叙述: 实现删除字符串中出现次数最少的字符.若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串. 字符串中其他字符保持原来的顺序. 输入: 字符串仅仅包括小写英文字母, 不考虑非法输入, ...

  8. Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符

    ylbtech-Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符 1.返回顶部 1. Java 实例 - 删除字符串中的一个字符  Java 实例 以 ...

  9. Python:删除字符串中的字符

    一.删除字符串两端的一种或多种字符 #strip().lstrip().rstrip()方法:(默认删除空格符) A.list.strip(字符):删除字符串两端的一种或多种字符: #例:删除字符串s ...

随机推荐

  1. transform、transition 和 animation区别

    CSS3中和动画有关的属性有三个 transform.transition 和 animation.下面来一一说明:        transform   从字面来看transform的释义为改变,使 ...

  2. Dockerfile 中的 CMD和ENTRYPOINT 两兄弟

    CMD 先说老大 CMD 当一个容器准备好运行之后,需要找一个指定命令来创建一个初始进程并运行. 一,/bin/sh -c 因为某种意义上一个Dockerfile其实可以理解是一个简化版bash 脚本 ...

  3. toplink

    TopLink,是位居第一的Java对象关系可持续性体系结构,原署WebGain公司的产品,后被Oracle收购,并重新包装为Oracle AS TopLink.TOPLink为在关系数据库表中存储 ...

  4. 升级或者重装Discuz! 版本后 QQ互联英文乱码显示的正确解决方法

    升级Discuz! X3版本QQ互联英文乱码!connect_viewthread_share_to_qq!  目前Discuz!论坛上 最简单的解决方法: 第一步:后台----->站长---- ...

  5. springboot设置接口超时

    springboot 设置接口超时 1.配置文件 application.properties中加了,意思是设置超时时间为20000ms即20s, spring.mvc.async.request-t ...

  6. Ubuntu下编辑并编译运行c++程序

    一.使用vim编辑c++代码: vim hello.cpp 输入如下代码: #include <iostream> using namespace std; int main() { co ...

  7. CPP-STL:随机数发生器random_shuffle

    //--------------------------------------------------------------------------- #include <string.h& ...

  8. PHP03 移动互联网和PHP

    学习要点 移动互联网 云计算 网络通信协议 Apache http服务器 PHP运行原理 学习目标 理解网络通信协议 掌握PHP运行原理 WAMP开发环境的搭建   移动互联网 定义 移动互联网,就是 ...

  9. Java垃圾回收之回收算法

    问题:谈谈你了解的垃圾回收算法 1.标记-清除算法(Mark and Sweep) 标记:从跟集合进行扫描,对存活的对象进行标记 清除:对堆内存从头到尾进行线性遍历,回收不可达对象内存 优点:简单 缺 ...

  10. Swift详解之NSPredicate

    言:谓词在集合过滤以及CoreData中有着广泛的应用.本文以Playground上的Swift代码为例,讲解如何使用NSPredicate. 准备工作 先在Playground上建立一个数组,为后文 ...