天天看點

仿微信标簽備注UI實作

最近看到微信的标簽備注界面的操作體驗挺好的,是以自己也想着實作一下,最終實作效果與微信的基本一緻,還算是比較滿意的_,是以在這裡共享給大家,有需要的同學可以到這裡下載下傳。效果如下:

仿微信标簽備注UI實作

當然,這個實作的過程也不是一帆風順的,之前的想法是使用

UICollectionView

來實作這樣的效果,這樣就可以不需要考慮排版和複用問題。都是做到一半的時候,進行不下去了(還是太菜了。。。T_T),主要是

UITextField

随着輸入文本來動态調整位置,如果在目前行中輸入長度超過螢幕寬度則需要換到下面一行。這個雖然能夠捕獲文本變更内容來實時重新整理和計算文本框位置,但是由于重新整理cell會直接導緻

UITextField

的焦點失效,并且也存在重用問題(同一個索引位置,在頻繁重新整理的情況下Cell會出現無法複用問題。。。。這可能是内部實作機制的緣故)。

基于上面的原因,抛棄了

UICollectionView

作為基礎元件的想法,直接繼承

UIScrollView

來進行功能實作。

VITagListView

雖然基于

UIScrollView

,但是内部還是實作了簡單複用機制的。在實作的過程裡面遇到最主要的問題有兩個:

  • 點選标簽彈出菜單問題。表面上看非常簡單,直接使用UIMenuController就可以實作。但是微信的彈出菜單時,其實鍵盤還是保持彈出狀态的(一般都需要使控件先成為響應者才可以彈出菜單),

    VITagListView

    中的标簽使用的是

    UIButton

    ,是以,如果要保證鍵盤彈出就不能使Button變為響應者,是以在控件裡面的菜單操作都是由

    UITextField

    去處理的。
  • 倒退鍵删除标簽問題。當在

    UITextField

    沒有文本内容的情況下,點選倒退鍵就能夠選中和删除标簽,在正常的

    UITextField

    代理下是擷取不到這個事件的,并且在iOS 8.3之前和之後有所變化,具體可以看

    VITagField

    deleteBackward

    keyboardInputShouldDelete

    方法。

具體實作就不這裡細說了,如果有更好的實作方式和改進建議,歡迎與我聯系,感謝大家的支援~

繼續閱讀