背景:在实现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. MATLAB GUI制作快速入门

    创建空白的GUI在MATLAB命令行中输入guide新建GUI,选择Blank GUI (Default),点击确定后就生成了一个空白的GUI制作界面,如下图所示 图1制作GUI的具体过程简单加法器将 ...

  2. 将自己的数据制作成voc格式

    VOCdevkit2007文件下只保存VOC2007,VOC2007下只保存Annotations ImageSets JPEGImages. JPEGImages存放所有的图片数据(即训练测试验证的 ...

  3. error C2143: 语法错误 : 缺少“;”(在“&”的前面)

    报错: error C2143: 语法错误 : 缺少“;”(在“&”的前面) 代码: #include <iostream> ostream & << (ost ...

  4. B6. Concurrent 内存模型与线程交互

    [概述]

  5. ios 之sqllite

    iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添 ...

  6. Android流行界面结构——Fragment通过ViewPager(带指示器)嵌套Fragment结构的创建方法详解

    原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6287213.html 当前Android流行界面结构的一种——Fragment通过ViewPage ...

  7. p1036 选数(不详细勿看,递归)

    题目:传送门 这题,不会做,而且看了好久才看懂题解的,然后在题解的基础上补了一个 if(start>end) return 0 感觉这样对于我更直观 转载自:大神博客的传送门,点击进入 先声明, ...

  8. Ubuntu 开机出现 "Your system is running in low-graphics mode"

    Ubuntu 开机出现 "Your system is running in low-graphics mode" 可能是权限问题 按网上的方法发现sudo命令无法使用,且系统变为 ...

  9. MySQL丨02丨忘记root用户密码怎么办?

    软件:Mysql 版本:8.0.13 1. 先暂停mysql的服务,方法是在cmd里输入如下代码: net stop mysql 2. 在安装文件夹下创建一个文件:mysql-ini.txt (我的安 ...

  10. C++中派生类使用基类成员的问题

    在C++中,派生类在定义构造函数时,会调用基类构造函数首先完成基类部分的构造: class Derive : public Base { public: Derive(string nam, int ...