xcode+文字支持html元素,iOS使用UITextview实现富文本编辑

这段代码展示了如何在Swift4中使用NSMutableAttributedString处理富文本,包括字体格式设置、图片转换为HTML字符串。通过遍历NSAttributedString获取图片并存储为字典,然后将HTML字符串与图片Base64编码对应,用于后台编辑和保存。代码适用于Xcode9及以上版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码使用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

以上只是截取代码部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值