iOS开发中 富文本是咱们经常使用的特性, 面对"花里胡哨"的文本设计, Foundation
的NSAttributedString
为咱们提供了很是大的帮助, 但他的缺点也难免给咱们带来了不少困扰 例如: 繁琐的API、处理交互需求的麻烦等, 为了解决平常开发中使用富文本的一些痛点, 我设计了AttributedString, 充分利用Swift语音的特性 简化富文本构建过程, 并扩展出更加优雅的交互处理, 自定义视图插入等等.git
这里有一个点要说一下, 附件位置的计算方式目前网络上不少都是 -4
-2
什么的都是不正确的, 字号一旦加大或者减少就都没法准确居中了, 有须要的小伙伴能够看一下我内部的实现 应该是全网最准确的了, 原理很少解释, 之后有机会单独写一篇讲解. 🕊github
原生的实现方式仅UITextView
支持, 也仅仅局限于URL
和NSTextAttachment
类型.正则表达式
UILabel
想要支持点击等交互的实现方式有不少种, 这里很少细说. 总之若是想实现点击和长按等触发方式, 以及各类内容类型的监听和高亮样式的显示成本仍是比较大的.swift
上面使用的是AttributedString的监听方式获得点击的回调, 还有另外一种action属性的方式 下面简单展现一下.网络
再来一个长按触发的.异步
大概就是这样子, 交互相关的就演示到这里, 还有高亮样式的设置等等特性能够到Demo中去发掘.spa
好比想将文本中的电话号码单独设置字号和字色:设计
固然正则表达式确定不能少:3d
这里就不说原生怎么实现了 由于太麻烦了, 涉及到的点不少, 这里只展现一下AttributedString如何向UITextView
添加自定义视图.code
咳咳.. 是否是太简单了? 其实它和附件的性质同样, 在AttributedString中它叫ViewAttachment
. 具体位置和大小的设置与其余附件一致. 具体参见AttributedString.Attachment.Style
.
NSAttributedString
对象?let string: NSAttributedString = AttributedString("LEE").value
复制代码
目前所有基于extension
对UIKit
的相关控件进行功能的实现, 力求作到最小化的影响.
AttributedString中有完善的 +
+=
运算符扩展.
同时还支持 String
+ AttributedString
和 NSAttributedString
+ AttributedString
等操做.
iOS
平台吗?AttributedString
实际是对 NSAttributedString
原生特性的一种封装, 同时增长了不少新的特性, 理论上 NSAttributedString
所支持的平台 AttributedString
都支持, 固然少部分特性除外. 例如 watchOS
就没有附件(NSTextAttachment
).
总的来讲目前 AttributedString
对于iOS
、tvOS
、macOS
、watchOS
都是支持的.
不少 目前在计划中的包括: 表情解析器, 异步渲染(须要构建一个新的UIView
子类)等等.
若是你有什么好的建议能够在Github中发起Issues.
固然没问题, 等下一篇咯.
众所周知 YYText 是OC
中一款很是优秀的富文本库, 他表明了一个时代, 但目前彷佛已经没有再维护了, 积累了不少Issues没法获得解决.
并且在Swift中使用OC的库很难发挥出其语言该有的特性. 恰巧在Swift
中尚未一款可以媲美 YYText 的富文本库, 这一直是之前困扰个人点, 也是我创造AttributedString的出发点. 不能说如今AttributedString就能媲美YYText怎么样怎么样.. 毕竟还有不少工做要作, 但我会以YYText为标杆, 作到Swift
中的"YYText
" 甚至更好. 感谢你们的支持.
经过上面一些简单的对比, 能够很明显看出总体代码的简化程度, 越是复杂的富文本 代码量的体现越是明显, 总体可读性也没有问题, 编写时的调用体验也很友好.
若是你以为还不错 不妨来一波 Star Fork Share 素质三连[滑稽]~