网站建设 精品课程,墨猴seo排名公司,wordpress 权限 写文章,wordpress开发服务本文将带你了解IOS开发入门iOS 开发 富文本详解之TextKit详解#xff0c;希望本文对大家学IOS有所帮助。textkit结构textkit使用步骤#Mark - 1. 自定义label --class CZLabel: UILabel---四个属性//1.属性文本存储private lazy var textStorage NSTextStorage()//2.负责文本…本文将带你了解IOS开发入门iOS 开发 富文本详解之TextKit详解希望本文对大家学IOS有所帮助。textkit结构textkit使用步骤#Mark - 1. 自定义label --class CZLabel: UILabel---四个属性//1.属性文本存储private lazy var textStorage NSTextStorage()//2.负责文本字形布局对象private lazy var layoutManager NSLayoutManager()//3.设定文本绘制的范围private lazy var textContainer NSTextContainer()//4.属性数组,保存匹配的范围private lazy var linkRanges [NSRange]()#Mark - 2. 重新init方法-- override init(frame: CGRect) {}//0.开启用户交互userInteractionEnabled true//1.textStorage接管label的属性if let attributedText attributedText {}//2.设置对象关系textStorage.addLayoutManager(layoutManager)layoutManager.addTextContainer(textContainer)#Mark - 3. 外界给label的text属性赋值 label.text 好友,#健康#,.....//重写属性的text方法--一旦label里的内容发生变化,就可以让textStorage相应变化//1.段落处理--1.范围 2.属性 3.段落样式let attrStringM addLineBreak(attributedText!)//2.正则匹配--1.清空原有 2.匹配范围 3.创建正则 4.匹配 5.遍历匹配结果,添加到属性数组regexLinkRanges(attrStringM)//3.连接颜色设置---1.范围 2.属性 3.添加颜色 4.遍历属性数组,改变颜色addLinkAttribute(attrStringM)//4.添加到textStoragetextStorage.setAttributedString(attrStringM)//5.重新绘制setNeedsDisplay()#Mark - 4. textStorage字形和属性发生变化时,通知NSLayoutManager重新布局文本//MARK:3.设置布局--制定文本绘制区域override func layoutSubviews() {super.layoutSubviews()//制定文本绘制区域textContainer.size bounds.size}#Mark - 5. 绘制textStorage的文本内容--不能调用superoverride func drawTextInRect(rect: CGRect) {let range NSMakeRange(0, textStorage.length)//Glyphs--字形---CGPoint()从原点绘制,也就是右上角layoutManager.drawGlyphsForGlyphRange(range, atPoint: CGPoint(x: 0,y: 0))}#Mark - 6. 用户点击事件交互//0.懒加载 # URL的匹配的正则法则 三个属性数组三步法:1.正则表达式 2.创建正则 3.匹配 4.便利匹配结果,添加到属性数组//1.获取用户点击的位置let location touches.first?.locationInView(self)//2.获取当前点中字符的索引let index layoutManager.glyphIndexForPoint(location, inTextContainer: textContainer)//3.判断index在哪个标记的range 范围上for range in atRange ?? [] {if NSLocationInRange(index, range) {let strSub (textStorage.string as NSString).substringWithRange(range)//进行结果处理}}Swift使用import UIKitclass ZYLabel: UILabel { //attributedText富文本//MARK:2.重写属性text方法,可以在ViewController里给文本赋值//一旦label里的内容发生变化,就可以让textStorage相应变化override var text:String? {didSet {if attributedText nil {return}//换行处理属性let attrStringM addLineBreak(attributedText!)//换行后进行--正则匹配regexLinkRanges(attrStringM)//换行后进行--连接颜色设置addLinkAttribute(attrStringM)//添加到textStoragetextStorage.setAttributedString(attrStringM)//重新绘制setNeedsDisplay()}}///MARK: textKit的三个核心对象//属性文本存储private lazy var textStorage NSTextStorage()//负责文本字形布局对象private lazy var layoutManager NSLayoutManager()//设定文本绘制的范围private lazy var textContainer NSTextContainer()private lazy var linkRanges [NSRange]()//纯代码接管Labeloverride init(frame: CGRect) {super.init(frame: frame)//0.开启用户交互userInteractionEnabled true//1.textStorage接管label的属性if let attributedText attributedText { //如果原有文本设置了attributetextStorage.setAttributedString(attributedText)}else if let text text { //如果原有文本没有设置attributetextStorage.setAttributedString(NSAttributedString(string: text))}else { //如果原有文本为niltextStorage.setAttributedString(NSAttributedString(string: ))}//2.设置对象关系textStorage.addLayoutManager(layoutManager)本文由职坐标整理并发布希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道