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 素質三連[滑稽]~