巧妙使用富文本來(lái)實(shí)現(xiàn)開發(fā)中的功能

在實(shí)際的項(xiàng)目開發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到這樣的一些設(shè)計(jì),如下圖

UI效果圖

十個(gè)App得有九個(gè)是這樣的,要求點(diǎn)擊"XXX協(xié)議",就跳轉(zhuǎn)到一個(gè)協(xié)議的頁(yè)面,通常我們會(huì)有兩種辦法去處理這樣的情況:

1、懶人派:不喜歡折騰,就去用兩個(gè)控件(UILabel + xxx),分別去顯示前面不可點(diǎn)擊部分和后面可點(diǎn)擊部分。

這樣很快的就搞定了,但是是真的搞定了嗎?往下看,這樣做會(huì)有坑的。

2、勤勞派:自己總結(jié)出一個(gè)實(shí)現(xiàn)方式,采用富文本+自定義顯示控件的方法來(lái)一勞永逸。

好了,先說(shuō)懶人派那樣做的坑吧,且不說(shuō)布局麻煩了(UILabel和UIButton對(duì)不齊),就說(shuō)適配問(wèn)題吧,假如,后面那幾個(gè)字在某一寬度的手機(jī)上,正好出現(xiàn)換行情況怎么辦?顯示還得照常顯示吧,點(diǎn)擊還的照常點(diǎn)擊吧?;旧蠅蚝纫粔亓恕?/p>

適配遇到兩種情況

1、在點(diǎn)擊范圍未出現(xiàn)換行情況下,點(diǎn)擊標(biāo)紅色字體,跳轉(zhuǎn)到用戶協(xié)議頁(yè)面。

2、在點(diǎn)擊范圍出現(xiàn)換行的情況下,點(diǎn)擊標(biāo)紅色字體,仍然跳轉(zhuǎn)到用戶協(xié)議頁(yè)面。

所以,懶人一下子就燥起來(lái)了,措手不及,防不勝防!

所以,懶人們還是勤快點(diǎn)吧,開發(fā)過(guò)程我們還是多思考一下,一勞永逸才是懶人之道。


封裝


實(shí)現(xiàn)思路:使用UITextView的selectionRectsForRange方法來(lái)獲取需要點(diǎn)擊跳轉(zhuǎn)部分的Rect(數(shù)組),然后重寫View的touchesBegan,判斷觸摸點(diǎn)是否在Rect內(nèi),若都不在則未命中,否則,則命中。

使用富文本+自定義顯示控件搞定了,使用起來(lái)特別的方便簡(jiǎn)單。代碼中已經(jīng)注釋很清楚了,保證看一眼你就會(huì)了。此demo實(shí)現(xiàn)了富文本點(diǎn)擊跳轉(zhuǎn),這一點(diǎn)在開發(fā)過(guò)程中,會(huì)衍生出很多應(yīng)用場(chǎng)景,不妨自己總結(jié)一下,觸類旁通。

demo的地址:https://github.com/SpringAndSummer/CoreTextJump/tree/master

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評(píng)論 25 709
  • 去年夏天 我家門口的大樹上 飛來(lái)一只知了 早上 它叫 知了知了 晚上 它也叫 知了知了 好像什么都知道 好吵好吵 ...
    拈花惹草閱讀 536評(píng)論 3 3
  • 看到唐菲菲進(jìn)來(lái),唐曉偉蒼白的臉上擠出一絲笑容,虛弱道:“姐,你來(lái)了?!彼銖?qiáng)打起精神,支撐著想坐起來(lái),只是,努力了...
    飄雲(yún)閱讀 306評(píng)論 0 1
  • 感恩明了因分享給予更喜悅的理念,分享給予不僅是一種精神上的富足更是一種格局的提升 感恩一直以來(lái)我所擁有的金錢寶寶,...
    鄔靜閱讀 151評(píng)論 0 2

友情鏈接更多精彩內(nèi)容