分享一下我封裝iOS自定義控件的體會,附上三個好用的控件Demo <時間選擇器&多行輸入框&日期選擇器>


前段時間有小伙伴問到我:"這樣的控件該怎么做呢?",我感覺是個比較簡單的控件,可能對於入行不久的同志思路沒有很清晰吧。趁着最近工作不忙,就來這里分享一下我封裝自定義控件的幾點體會吧。

一個良好的自定義控件,能大大減少控制器里的代碼,讓代碼在它最應該在的地方,顯得層次清晰。此外,一個沒有耦合的自定義控件,能拿到之后的任何項目中用,提高開發效率。接口友好、使用簡單、不存在耦合、代碼層次清晰易維護等是一個好控件的必備素質。項目中常見的自定義控件,往往是一些彈窗,方便用戶進行查看、輸入、選擇等操作。

下面貼出我最近封裝的三個控件代碼、效果圖和思路分析。

 

一、時間選擇器

1. 使用方法:先調用show方法,再定義回調block。

2. 效果截圖:控件內部加入了時間過濾(截圖時間12-09  09:55)並記憶了上次的選擇,無耦合

3. 思路分析:這個便是小伙伴問到我的控件,這個控件當時是用於這樣的場景:用戶約時間咨詢專家,通過這個控件選擇一個時間點。我的思路如下:

1) 分析界面(view):

  這個界面上部分是一個工具條,左右兩個按鈕分別切換到上一天/下一天,中間的lable顯示日期和星期幾。再看中間的12個按鈕,每個按鈕都代表某一個時間點,有可點擊狀態/不可點擊狀態/選中狀態三種樣式,在Demo中我用的是按鈕來實現,用collectionView應該能讓代碼更簡潔。

  同時需要考慮到,用戶每切換到另一天,控件需要刷新一下,要根據新的一天里,專家空閑時間(服務器返回),來刷新中間12個按鈕的顯示樣式[可預約/不可預約/當前選擇]。

2) 分析數據(model):

  先分析當前展示的一天中需要的數據,我們需要告訴用戶該專家哪些時間點可預約,哪些不可預約,用一個字段來表示就可以了,這里一共是12個時間點,也就是說這個控件的每一次展示,需要一個有12個元素的數組,這12個元素分別對應這12個時間點是否可預約。

  假設我們允許用戶的預約范圍是未來一周,那么這個控件就需要一個包含7個子數組的大數組,每個子數組有12個元素,是專家某一天的可否預約的數據。好,所以控制器需要給這個控件一個大數組。

3) 上一天/下一天按鈕的點擊事件處理:

  更多分析詳見Demo。

 

二、自定義多行輸入框

1. 使用方法:先設置數據,再調用show方法,最后定義回調block。

2. 效果截圖:控件內部加入了手機號、郵箱檢測方法,無耦合; 非法提示方式也較合適

3. 思路分析:這個控件很簡單,用起來也很方便,控件內部會根據傳進來的數據決定展示幾行輸入框出來,內部有做了數據的合法性檢查、鍵盤處理等...思路倒沒什么好說的...

 

三、日期選擇器

1. 使用方法:先調用show方法,再定義回調block。

2. 效果截圖:控件內部加入了簡單的時間判斷和非法選擇時的提示,只有當時間合法時,才調用回調block,傳遞合法的時間string出去。

 3. 思路分析:好吧,這個控件更簡單了...

 

 四、小結

   當我拿到設計圖時,第一步先分析界面什么地方應該是什么控件,再分析需要控制器傳過來什么數據,然后把需要暴露的屬性放在h文件里,不需要暴露的屬性放在m文件里。我封裝的自定義控件,一直努力做到以下兩點

  1. 接口友好,使用盡量簡單。顯示就是show,隱藏就是hide,不需要控制器來完成顯示和隱藏的代碼,控制器只需要告訴我什么時候show,什么時候hide就行。

  2. 該封裝的封裝好,減少控制器里的代碼。控制器只需要關心給你什么數據、什么時候讓你show、什么時候讓你hide和你的點擊事件我應該怎么處理。而不去關心你怎么展示數據、怎么處理數據等。

 

  Demo的github地址:https://github.com/banchichen/SomeGoodCustomView

  歡迎大家也把自己常用好用的自定義控件分享上去...也歡迎大家對其中瑕疵之處進行批評指正...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM