選擇國旗
- 1.搭建界面
- 2.設(shè)置pickerView的數(shù)據(jù)源 - -
- 3.分析有多少列,只有一列,因?yàn)槭俏淖趾蛨D片是同時(shí)滾動,如果兩列的話, 不會同時(shí)滾動
- 4.加載plist數(shù)據(jù),分析數(shù)據(jù)結(jié)構(gòu)
plist是個(gè)數(shù)組:返回這一列有多少行國旗
數(shù)組里是一個(gè)字典:描述著國旗的屬性 - 5.字典轉(zhuǎn)模型
- 6.有了數(shù)據(jù)就需要把數(shù)據(jù)展示到界面,不能用返回每行標(biāo)題的方法
- 7.搞一個(gè)View,每行需要展示一個(gè)標(biāo)題和圖片 -
- 8.自定義view,系統(tǒng)自帶的UIView,不好使
- 9.用xib描述自定義view,里面控件是固定的
- 10.設(shè)置每行的高度為44 -
- 11.返回每行cell樣子的代理方法,reusingView在ios7沒有效果,view永遠(yuǎn)都是 空,沒有做緩存输硝。
鍵盤處理
- 1.搭建界面
- 2.文本框不可以讓用戶編輯
- 2.1不能設(shè)置enable= NO,鍵盤不能彈出來
- 2.2 通過代理,不允許用戶輸入,只有生日和城市不需要用戶輸入,添加 一個(gè)判斷
- 3.自定義生日鍵盤
- 3.1 UIDatePicker基本使用,模式,地區(qū) - -
- 3.2監(jiān)聽UIDatePicker的事件,繼承UIControl,直接addTarget - 3.3日期格式對象,把date轉(zhuǎn)換字符串,顯示到文本框
- 4.自定義城市鍵盤
- 4.1 UIPickerView,展示數(shù)據(jù)需要設(shè)置數(shù)據(jù)源和代理 -
- 4.2解析plist數(shù)據(jù),分析數(shù)據(jù)結(jié)構(gòu)
plist是個(gè)數(shù)組,表示有多少個(gè)省份
數(shù)組里是一個(gè)字典,里面包含省份的信息,名稱和城市列表 - 4.3 實(shí)現(xiàn)數(shù)據(jù)源和代理,把數(shù)據(jù)展示到視圖
- 4.4 和之前的點(diǎn)餐不一樣,之前直接能獲取到每一列有多少行,這里需要 判斷當(dāng)前是哪一列,根據(jù)第0列獲取第1列的行數(shù),第0列是省,第1列是 城市,城市由省決定
- 4.5 返回第component列多少行
- 4.6 返回第component列第row行的標(biāo)題,這里的行號可能是第0列的和第 1列的,需要做判斷。第0列的row,表示是哪個(gè)省,第1列的row,表示 是當(dāng)前第1列選中的省會的哪個(gè)城市。
第0列,省會的標(biāo)題,取決于省會數(shù)組行號 第1列,城市的標(biāo)題,取決于當(dāng)前選中哪個(gè)省 - 4.7 解決二級聯(lián)動的問題,兩列同時(shí)滾動,會報(bào)角標(biāo)越界錯(cuò)誤
- 原因:返回每一行的樣子的代理方法會經(jīng)常調(diào)用,只要有新的一行 出現(xiàn)就會調(diào)用。這里每次都會獲取最新選中的省,而第0列展示的 是之前選中的省會,如果最新選中的省會的城市總數(shù)小于之前選中 的省會。
- 假設(shè):最新選中的城市只有有4個(gè),但是之前選中的省會城市有10 行,當(dāng)?shù)?列滾到5就會報(bào)角標(biāo)越界錯(cuò)誤磨确。
- 解決方式:這里不能獲取最新的選中省會,需要記錄之前選中的, 且只需要記錄一次,在選中一行的代理方法里記錄。 注意:在刷新城市之前記住省會角標(biāo),應(yīng)該刷新的城市,是當(dāng)前選 中的省會的城市。
- 4.8 監(jiān)聽城市選擇,選中新的省會身隐。
- 1> 記錄選中的省會
- 2> 刷新第1列
- 3> 第一列默認(rèn)選中第一個(gè)城市
- 4> 把選中的省會和獲取選中的城市顯示到文本框
- 5.添加自定義鍵盤工具條
- 5.1 封裝工具條:繼承UIView,原因:不讓外界知道里面是什么東西,就不 能修改Toolbar里面的東西。
- 5.2固定的,用xib 述,并且 供類方法快速創(chuàng)建對象 - 5.3整個(gè)文本框應(yīng)該擁有同一個(gè)鍵盤工具條,懶加載一個(gè)鍵盤工具條,然 后遍歷所有的文本框,搞個(gè)可變數(shù)組把所有文本框添加到數(shù)組
- 5.4監(jiān)聽item點(diǎn)擊,通過代理通知控制器唯灵。
- 5.5當(dāng)點(diǎn)擊下一個(gè),應(yīng)該是后面的文本框有彈出鍵盤,成為第一響應(yīng)者, 怎么判斷下一個(gè)文本框是誰?
○ 把所有文本框加入到數(shù)組中,記錄當(dāng)前彈出鍵盤的文本框所在的角 標(biāo),++就是下一個(gè)文本框了贾铝。
○ 在文本框開始編輯的時(shí)候,記錄,編輯的文本框就是彈出鍵盤的文 本框 - 5.6 解決角標(biāo)越界的問題,當(dāng)當(dāng)前彈出鍵盤的文本框是第一個(gè)角標(biāo)的時(shí) 候,上一個(gè)不允許點(diǎn)擊