本文旨在為大家提供“干貨”,在文章結(jié)尾會提供Demo下載地址胁出。本文內(nèi)容簡單型型,但實(shí)用價(jià)值高,有需要的自取全蝶,并關(guān)注我闹蒜!大牛可繞行抑淫。后續(xù)Richy將定期為大家更新...
閑話不多說了绷落,先給大家看效果展示:
縱觀該例子,用到的知識點(diǎn)僅有UIPickerView結(jié)合數(shù)據(jù)源的使用始苇,但是Richy花費(fèi)了很長時(shí)間才完成砌烁。其中90%的時(shí)間用于手動錄入Province.plist(各省市區(qū)的信息),雖然說錄入數(shù)據(jù)的過程參考了網(wǎng)上已公開的現(xiàn)成的Address.plist(PS:非常感謝共享次內(nèi)容的GG/MM),但是重構(gòu)plist內(nèi)部結(jié)構(gòu)依然是個(gè)繁重的工程函喉,因此各位客官要體諒Richy的辛勞避归。
Now,Richy介紹一下實(shí)現(xiàn)的思路:
一管呵、UIPickerView的使用
1. UIPickerView的創(chuàng)建
2. 遵守兩個(gè)協(xié)議:
3. 常用各協(xié)議下的方法:
4.其他方法:
二梳毙、數(shù)據(jù)源 Province.plist的結(jié)構(gòu)
關(guān)鍵的Key值定義如下:
省:Province捐下;
市:city
區(qū):districts
舉個(gè)Demo中的例子幫大家理解顿天,如下圖:
咱們一起看一下最復(fù)雜的一個(gè)(前提:熟悉plist的結(jié)構(gòu)),那么其他的就是小case了。
return [self.arrayDS[_provinceIndex][@"citys"][_cityIndex][@"districts"] count];
首先,這行內(nèi)容代表的涵義是返回第3列的行數(shù)肖方;
其次篓足,當(dāng)操作第3列時(shí)說明,第1和2列是確定的晶框,故通過兩個(gè)Index記錄其選中的行排抬;
最后,結(jié)果即某一适诙巍(self.arrayDS[_provinceIndex])中的某一市(self.arrayDS[_provinceIndex][@"citys"][_cityIndex])中的所有區(qū)(self.arrayDS[_provinceIndex][@"citys"][_cityIndex][@"districts"])的總數(shù)量([self.arrayDS[_provinceIndex][@"citys"][_cityIndex][@"districts"] count])蹲蒲。
三、細(xì)節(jié)問題處理
1. 三列之間是緊密相關(guān)的侵贵,操作第1列時(shí)届搁,第2和3列會隨之發(fā)生改變;而操作第2列的時(shí)候窍育,第3列會隨之發(fā)生改變卡睦,但第1列確實(shí)固定的;而操作第3列的時(shí)候漱抓,第1和2列均固定表锻。
2. 基于上邊內(nèi)容,從而決定了你什么時(shí)間記錄省市區(qū)的選中Index(eg:_cityIndex = row;),同時(shí)也決定了你什么時(shí)間重置數(shù)據(jù)(eg: _districtIndex = 0;)以及刷新數(shù)據(jù)展示(-reloadComponent)乞娄,具體見下圖:
四瞬逊、最后,感謝大家堅(jiān)持看完本文仪或。您的鼓勵和支持是Richy的動力源泉确镊。
簡書地址:http://www.reibang.com/users/76e87d7d8887/latest_articles
GitHub:https://github.com/RichyLeo