iOS使用UITextview实现富文本编辑
代码使用swift4 Xcode9及以上
主要思路是
Textview使用NSMutableAttributedString 转化为 html字符 给后台
其中图片另外 截取htmlStr里相应的图片标示 组成字典imgs[“标示Str”] = “图片Base64” 给后台
再编辑时拿到后台的 带图html字符串转为NSMutableAttributedString给Textview 使用enumerateAttribute可以获取图片
之后再保存和新建的保存差不多
主要注意NSAttachment的使用
attStr.enumerateAttribute(NSAttributedStringKey.attachment, in:NSRange.init(location:0, length:myHaq.attStr.length), options:NSAttributedString.EnumerationOptions(rawValue:0), using: { (value, range, stop)in
if let attachImg = (valueas?NSTextAttachment) {
let img = attachImg.image!
print(img)
imgs += [img]//最终处理 获取所有图片
//let attachmentWrapper = attachImg.fileWrapper!
//imgs += [UIImage.init(data: attachmentWrapper.regularFileContents!)!]
}
})
实现富文本字体格式
//加黑
myHaq.texterTypings[NSAttributedStringKey.font.rawValue] = myHaq.isBold ? UIFont.boldSystemFont(ofSize: myHaq.fontSize) : UIFont.systemFont(ofSize: myHaq.fontSize)
//斜体
myHaq.texterTypings[NSAttributedStringKey.obliqueness.rawValue] = sender.tintColor == colorSystem ? 0.25 : 0
//下划线
myHaq.texterTypings[NSAttributedStringKey.underlineStyle.rawValue] = sender.tintColor == colorSystem ? 1 : 0
//颜色
myHaq.texterTypings[NSAttributedStringKey.foregroundColor.rawValue] = colors[tapG.view!.tag]
//大小
myHaq.texterTypings[NSAttributedStringKey.font.rawValue] = myHaq.isBold ? UIFont.boldSystemFont(ofSize: myHaq.fontSize) : UIFont.systemFont(ofSize: myHaq.fontSize)
save到后台
let markHtmlStr = myHaq.attStr.toHtmlStr!//转为html字符串
varimgs = [UIImage]()
myHaq.attStr.enumerateAttribute(NSAttributedStringKey.attachment, in:NSRange.init(location:0, length:myHaq.attStr.length), options:NSAttributedString.EnumerationOptions(rawValue:0), using: { (value, range, stop)in
ifletattachImg = (valueas?NSTextAttachment) {
letimg = attachImg.image!
print(img)
imgs += [img]//最终处理 获取所有图片
//let attachmentWrapper = attachImg.fileWrapper!
//imgs += [UIImage.init(data: attachmentWrapper.regularFileContents!)!]
}
})
myHaq.netDic.removeAll()
varimgIdx =0
forstrinmarkHtmlStr.components(separatedBy:"\n") {
print(str)
//str 注意 iOS12 没有contains("file:") 存储图片标示策略需调整
// iOS12之前:
文章图片
// iOS12:
if str.contains("file:") {//截取转化后的htmlStr中的所有img标示
varstr1 = str
print(str1)
ifstr.contains("//Attachment") {
str1 =String(str1[str1.range(of:"")!.upperBound])
}else{//网络图片 修改时是后台传来的图片地址
str1 =String(str1[str1.range(of:"")!.upperBound])
}
print(str1)
myHaq.netDic[str1] =UIImageJPEGRepresentation(imgs[imgIdx],1.0)!.base64EncodedString(options:NSData.Base64EncodingOptions.lineLength64Characters)
imgIdx +=1
}
}
myHaq.netDic["markHtmlStr"] = markHtmlStr//数据在myHaq.netDic里 发送网络请求就ok
【iOS使用UITextview实现富文本编辑】以上只是截取代码部分
代码: https://pan.baidu.com/s/1A4mb4oPh7TwkhrkGR9bsww 提取码: vcmi
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- 2020-04-07vue中Axios的封装和API接口的管理
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用