在許多的項目中都會用到segment的樣式實現不同類型頁面、數據的選擇, 很多項目中會用到多次segment的樣式, 但是系統的segment樣式往往不符合項目需求, 大多數的項目及采用按鈕或者其它的方式實現,使得頁面的代碼量增大,重復利用率低,筆者根據自己的思路實現了可以滿足項目需求的segment進行封裝,具體代碼在這里, 代碼量少, 封裝簡單
使用如下:
segment的使用
- 效果如下:
自定制的segment
實現步驟##
具體實現過程如下:
-
層級結構
- 由于為了達到某些新聞類App中可左右滑動的segment效果, 采用底層為scrollView, 上面為自定義個數的UIButton, 用以處理點擊事件
-
實現原理
??根據用戶定義的items數組中標題個數, 如果用戶未設置視圖的左右滑動效果,即contentOffSet, 則均分視圖的寬度為布局UIButton的寬度, 高度為視圖的高度
segment的點擊事件的實現:
??通過調用閉包(即Objective-C中的block)的形式,當按鈕點擊時, 通過selectedSegmentIndex屬性獲取之前的按鈕, 并設置按鈕的選中狀態,并修改當前選中按鈕的屬性及selectedSegmentIndex,同事調用閉包實現點擊方法
??通過采用add(target:, action:)的方式實現segment的點擊方法時, 首先保存調用對象及調用方法, 在按鈕被點擊時讓保存的對象響應方法的實現
當設置segment選中的下標時, 需要重寫其set方法, 實現滑塊的移動動畫及按鈕的選中狀態
以上為筆者的一個大體思路, 以及部分功能性代碼, 若需要完整的代碼, 可參考github, 可能有所不詳細, 后期會不斷更改, 若有不足,請指出, 謝謝