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!)!]
 
             }
 
         })
 
         varimgIdx =0
         forstrinmarkHtmlStr.components(separatedBy:"><") {
             if str.contains("file:") {//截取转化后的htmlStr中的所有img标示
                 varstr1 = str
                 print(str1)
                 ifstr.contains("//Attachment") {
                     str1 = String(str1[str1.range(of: "img src")!.lowerBound..<str1.range(of: ".png")!.upperBound])
                 }else{//网络图片 修改时是后台传来的图片地址
                     str1 = String(str1[str1.range(of: "img src")!.lowerBound..<str1.range(of: ".jpg")!.upperBound])
                 }
                 print(str1)
                 
                    DCNetSir.upIconImg(imgs[imgIdx]) { [self] fileUrl in
                        markHtmlStr = markHtmlStr.replacingOccurrences(of: str1, with: "img src=\"\(fileUrl)")//用上传后的图片url替换html字符串里图片标识字符

                        upCount += 1
                        if imgs.count == upCount {//上传图片完成计数 上传所有后保存html字符串
                            saveDo()
                        }
                    }

                 imgIdx +=1
             }
         }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,076评论 3 119
  • 03199陈俊玲 《朱家故事》这一个故事,我一直认为是有一定的趣味性和一定的“科幻性”,在这种趣味和科幻中让我们读...
    郡灵灵阅读 3,122评论 0 1
  • 夏天,是炎热的。走出家门,只见邻居家的小狗懒洋洋地躺在地上,伸出舌头,仿佛在说:“今天实在太热了。”走在...
    小呆呆的烦恼阅读 2,507评论 0 1
  • "but in the long run we can try to change the norms where...
    011000阅读 2,206评论 0 0
  • 我追索人心的深度,却看到了人心的浅薄。从前的那个我,如果找到现在的我,会得到很好的款待。岁月不饶人,我亦未曾饶过岁...
    艾小墨阅读 3,738评论 0 0

友情链接更多精彩内容