最近看到微信的標(biāo)簽備注界面的操作體驗(yàn)挺好的,所以自己也想著實(shí)現(xiàn)一下,最終實(shí)現(xiàn)效果與微信的基本一致,還算是比較滿意的_,所以在這里共享給大家,有需要的同學(xué)可以到這里下載。效果如下:

當(dāng)然,這個(gè)實(shí)現(xiàn)的過程也不是一帆風(fēng)順的,之前的想法是使用UICollectionView來實(shí)現(xiàn)這樣的效果,這樣就可以不需要考慮排版和復(fù)用問題。都是做到一半的時(shí)候,進(jìn)行不下去了(還是太菜了。。。T_T),主要是 UITextField隨著輸入文本來動(dòng)態(tài)調(diào)整位置,如果在當(dāng)前行中輸入長(zhǎng)度超過屏幕寬度則需要換到下面一行。這個(gè)雖然能夠捕獲文本變更內(nèi)容來實(shí)時(shí)刷新和計(jì)算文本框位置,但是由于刷新cell會(huì)直接導(dǎo)致UITextField的焦點(diǎn)失效,并且也存在重用問題(同一個(gè)索引位置,在頻繁刷新的情況下Cell會(huì)出現(xiàn)無法復(fù)用問題。。。。這可能是內(nèi)部實(shí)現(xiàn)機(jī)制的緣故)。
基于上面的原因,拋棄了UICollectionView作為基礎(chǔ)組件的想法,直接繼承UIScrollView來進(jìn)行功能實(shí)現(xiàn)。VITagListView雖然基于UIScrollView,但是內(nèi)部還是實(shí)現(xiàn)了簡(jiǎn)單復(fù)用機(jī)制的。在實(shí)現(xiàn)的過程里面遇到最主要的問題有兩個(gè):
點(diǎn)擊標(biāo)簽彈出菜單問題。表面上看非常簡(jiǎn)單,直接使用UIMenuController就可以實(shí)現(xiàn)。但是微信的彈出菜單時(shí),其實(shí)鍵盤還是保持彈出狀態(tài)的(一般都需要使控件先成為響應(yīng)者才可以彈出菜單),
VITagListView中的標(biāo)簽使用的是UIButton,因此,如果要保證鍵盤彈出就不能使Button變?yōu)轫憫?yīng)者,所以在控件里面的菜單操作都是由UITextField去處理的。退格鍵刪除標(biāo)簽問題。當(dāng)在
UITextField沒有文本內(nèi)容的情況下,點(diǎn)擊退格鍵就能夠選中和刪除標(biāo)簽,在正常的UITextField代理下是獲取不到這個(gè)事件的,并且在iOS 8.3之前和之后有所變化,具體可以看VITagField的deleteBackward和keyboardInputShouldDelete方法。
具體實(shí)現(xiàn)就不這里細(xì)說了,如果有更好的實(shí)現(xiàn)方式和改進(jìn)建議,歡迎與我聯(lián)系,感謝大家的支持~