ios开发text kit_IOS开发入门之TextKit详解
本文将带你了解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.添加到textStorage
textStorage.setAttributedString(attrStringM)
//5.重新绘制
setNeedsDisplay()
#Mark - 4. textStorage字形和属性发生变化时,通知NSLayoutManager重新布局文本
//MARK:3.设置布局--制定文本绘制区域
override func layoutSubviews() {
super.layoutSubviews()
//制定文本绘制区域
textContainer.size = bounds.size
}
#Mark - 5. 绘制textStorage的文本内容--不能调用super
override 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 UIKit
class 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)
//添加到textStorage
textStorage.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]()
//纯代码接管Label
override init(frame: CGRect) {
super.init(frame: frame)
//0.开启用户交互
userInteractionEnabled = true
//1.textStorage接管label的属性
if let attributedText = attributedText { //如果原有文本设置了attribute
textStorage.setAttributedString(attributedText)
}else if let text = text { //如果原有文本没有设置attribute
textStorage.setAttributedString(NSAttributedString(string: text))
}else { //如果原有文本为nil
textStorage.setAttributedString(NSAttributedString(string: ""))
}
//2.设置对象关系
textStorage.addLayoutManager(layoutManager)
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!
ios开发text kit_IOS开发入门之TextKit详解相关推荐
- 【IOS 开发】Objective - C 入门 之 数据类型详解
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38544659 1. 数据类型简介及输出 (1) 数据类型简介 ...
- 【IOS 开发】Object - C 入门 之 数据类型详解
转载来自: http://blog.csdn.net/shulianghan/article/details/38544659 1. 数据类型简介及输出 (1) 数据类型简介 数据类型简介 : Obj ...
- 《微信小程序:开发入门及案例详解》—— 3.4 小结
本节书摘来自华章出版社<微信小程序:开发入门及案例详解>一 书中的第3章,第3.4节,作者李骏 边思,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.4 小 ...
- Go 语言快速开发入门(基础语法详解,第一节)
Go 语言快速开发入门(基础语法详解,第一节) 一.基础语法详解,第一节 1.HelloWorld 1.1.代码编写和解释 1.2.go语言注意事项 2.Go 语言的转义字符&&Go ...
- 移动端开发touchstart,touchmove,touchend事件详解和项目
移动端开发touchstart,touchmove,touchend事件详解和项目 最近在做移动端的开发,在一个"服务商管理"页面使用到了触摸事件"touchstart& ...
- unity3d开发实战《啪啪三国》技术详解!
unity3d开发实战<啪啪三国>技术详解! 去年11月,上海火溶网络CEO王伟峰以其第一款3d手游产品<啪啪三国>为例,着重讲解了unity3D手机网游开发的经验,其中涉及 ...
- android生命周期_Android开发 View的生命周期结合代码详解
咱们以TextView控件为例: /** * Created by SunshineBoy on 2020/9/23. */ public class TestTextView extends and ...
- php安装与下载,学习PHP网站开发 连载——PHPCMS的下载与安装详解
原标题:学习PHP网站开发 连载--PHPCMS的下载与安装详解 首先是要下载,然后安装,才能在本地学习和调试 1:下载 PHPCMS官网地址:www.phpcms.cn 接着点击: 下载结果: 解压 ...
- HMI智能串口屏——在STM32开发板上的实战应用及其详解
HMI智能串口屏--在STM32开发板上的实战应用及其详解 一.HMI智能串口屏使用步骤 二.附录 一.HMI智能串口屏使用步骤 安装USART HMI软件 (一般买的串口屏里面,商家送的资料里面都有 ...
最新文章
- 数据挖据之GeoHash核心原理解析
- WinCE文件目录定制
- HTML学习01之初识HTML
- seo html空格影响,这一对HTML标签嵌套对SEO优化的影响,居然99%的人不知道!
- 11_CollapsingMergeTree,(State行和Cancel行匹配示例),聚合查询,Cancel状态行取反的聚合查询
- (转)iOS面试题目
- oracle中exp/imp讲解
- 比反射更快:委托 第1部分
- sql练习三(DataWhale 系列-最终)
- python 服务端判断客户端异常断开
- 耐高温轴承1000度_1000度耐高温轴承的类型选择--SIAIF耐高温轴承
- 手机安装W ndows7镜像,Windows7ISO镜像安装系统教程
- web页面跳转支付宝网页支付
- mysql 1236错误_MySQL主从失败 错误Got fatal error 1236解决方法
- h5计时器(requestAnimationFrame)
- 大学生毕业后的档案问题如何处理
- java8中的Stream用法详解
- 白平衡测试—imatest
- oracle12c口令文件,学习笔记:Oracle 12C ASM 新特性 共享密码文件
- hta 北京自动挂号器
热门文章
- Demosaic算法学习
- /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波6 - 分段线性变换 - 比特平面分层
- python dialect='excel'是什么意思_python读取和生成excel文件
- float浮动,定位
- #10172. 「一本通 5.4 练习 1」涂抹果酱 题解
- Pandas CookBook -- 04选取数据子集
- 简单实现顶部固定,中部自适应布局
- 51nod 1040最大公约数和(欧拉函数)
- linux下vi修改文件用法