本文旨在為大家提供“干貨”,在文章結尾會提供Demo下載地址。本文、內容簡單,但實用價值高,有需要的自取,并關注我!大牛可繞行。>后續(xù)Richy將定期為大家更新...

縱觀該例子,用到的知識點僅有UIPickerView結合數(shù)據(jù)源的使用,但是Richy花費了很長時間才完成。其中90%的時間用于手動錄入Province.plist(各省市區(qū)的信息),雖然說錄入數(shù)據(jù)的過程參考了網(wǎng)上已公開的現(xiàn)成的Address.plist(PS:非常感謝共享次內容的GG/MM),但是重構plist內部結構依然是個繁重的工程,因此各位客官要體諒Richy的辛勞。
Now,Richy介紹一下實現(xiàn)的思路:
一、UIPickerView的使用
-
UIPickerView的創(chuàng)建
01.png -
遵守兩個協(xié)議:
02.png -
常用各協(xié)議下的方法:
03.png
4.其他方法:

二、數(shù)據(jù)源 Province.plist的結構

關鍵的Key值定義如下:
省:Province;
市:city
區(qū):districts
舉個Demo中的例子幫大家理解,如下圖:

咱們一起看一下最復雜的一個(前提:熟悉plist的結構),那么其他的就是小case了。
return [self.arrayDS[_provinceIndex][@"citys"][_cityIndex][@"districts"] count];
首先,這行內容代表的涵義是返回第3列的行數(shù);
其次,當操作第3列時說明,第1和2列是確定的,故通過兩個Index記錄其選中的行;
最后,結果即某一省(self.arrayDS[_provinceIndex])中的某一市(self.arrayDS[_provinceIndex][@"citys"][_cityIndex])中的所有區(qū)(self.arrayDS[_provinceIndex][@"citys"][_cityIndex][@"districts"])的總數(shù)量([self.arrayDS[_provinceIndex][@"citys"][_cityIndex][@"districts"] count])。
三、細節(jié)問題處理
三列之間是緊密相關的,操作第1列時,第2和3列會隨之發(fā)生改變;而操作第2列的時候,第3列會隨之發(fā)生改變,但第1列確實固定的;而操作第3列的時候,第1和2列均固定。
基于上邊內容,從而決定了你什么時間記錄省市區(qū)的選中Index(eg:_cityIndex = row;),同時也決定了你什么時間重置數(shù)據(jù)(eg: _districtIndex = 0;)以及刷新數(shù)據(jù)展示(-reloadComponent),具體見下圖:

GitHub:https://github.com/RichyLeo
Demo下載地址:https://github.com/RichyLeo/ProvincePickerView.git


