在實(shí)際的項(xiàng)目開發(fā)過程中,我們經(jīng)常會(huì)遇到這樣的一些設(shè)計(jì),如下圖
十個(gè)App得有九個(gè)是這樣的揖铜,要求點(diǎn)擊"XXX協(xié)議"膳音,就跳轉(zhuǎn)到一個(gè)協(xié)議的頁面,通常我們會(huì)有兩種辦法去處理這樣的情況:
1大审、懶人派:不喜歡折騰蘸际,就去用兩個(gè)控件(UILabel + xxx),分別去顯示前面不可點(diǎn)擊部分和后面可點(diǎn)擊部分饥努。
這樣很快的就搞定了捡鱼,但是是真的搞定了嗎?往下看,這樣做會(huì)有坑的驾诈。
2缠诅、勤勞派:自己總結(jié)出一個(gè)實(shí)現(xiàn)方式,采用富文本+自定義顯示控件的方法來一勞永逸乍迄。
好了管引,先說懶人派那樣做的坑吧,且不說布局麻煩了(UILabel和UIButton對(duì)不齊)闯两,就說適配問題吧褥伴,假如,后面那幾個(gè)字在某一寬度的手機(jī)上漾狼,正好出現(xiàn)換行情況怎么辦重慢?顯示還得照常顯示吧,點(diǎn)擊還的照常點(diǎn)擊吧逊躁∷契猓基本上夠喝一壺了。
1稽煤、在點(diǎn)擊范圍未出現(xiàn)換行情況下核芽,點(diǎn)擊標(biāo)紅色字體,跳轉(zhuǎn)到用戶協(xié)議頁面酵熙。
2轧简、在點(diǎn)擊范圍出現(xiàn)換行的情況下,點(diǎn)擊標(biāo)紅色字體匾二,仍然跳轉(zhuǎn)到用戶協(xié)議頁面哮独。
所以,懶人一下子就燥起來了假勿,措手不及借嗽,防不勝防!
所以转培,懶人們還是勤快點(diǎn)吧恶导,開發(fā)過程我們還是多思考一下,一勞永逸才是懶人之道浸须。
實(shí)現(xiàn)思路:使用UITextView的selectionRectsForRange方法來獲取需要點(diǎn)擊跳轉(zhuǎn)部分的Rect(數(shù)組)惨寿,然后重寫View的touchesBegan,判斷觸摸點(diǎn)是否在Rect內(nèi)删窒,若都不在則未命中裂垦,否則,則命中肌索。
使用富文本+自定義顯示控件搞定了蕉拢,使用起來特別的方便簡單。代碼中已經(jīng)注釋很清楚了,保證看一眼你就會(huì)了晕换。此demo實(shí)現(xiàn)了富文本點(diǎn)擊跳轉(zhuǎn)午乓,這一點(diǎn)在開發(fā)過程中,會(huì)衍生出很多應(yīng)用場(chǎng)景,不妨自己總結(jié)一下闸准,觸類旁通益愈。
demo的地址:https://github.com/SpringAndSummer/CoreTextJump/tree/master