先看效果图:

实现这一的效果使用的控件是UIpickerview。使用的时候就会知道其实这个控件跟tableview的使用差不多,都有自己的代理方法,返回个数,返回component的个数类似于tableview的section,然后每个component会有多少个row。实现方法,然后把plist文件存储的省市区这个大字典,转成model,这里我转model用的是mjextension。然后在titleforrow这个方法里返回title就可以了。
注意一点,在滑动的时候,我把滑动完成的当前index标记,用来记住滑动完成后该显示哪个title,但是有一种另外的情况,就是比如我刚滑到了黑龙江省,有10几个市 滑动右边城市的时候快速滑动,还没停止的时候最左边的省份迅速滑动到上海,然后上海是一个直辖市,里面的城市只有一个,这时候右边刚才黑龙江的市 刚刚停止滑动,index很大,然后左边的省份已经切换到了上海,拿那个很大的index去上海这个省份里刷新城市,就会报数组越界的错误,导致程序崩溃
这里我采用了一个办法,就是当左边省份滑动完成的时候 会调用一次reload方法,在reload方法执行之后紧接着执行的的返回个数和title的方法里面 做一个判断,就是如果此时城市的index大于当前省份做含的城市个数,就让城市index
= 0.这样之前滑动到了任何一个城市大于1的省份之后迅速滑动右边的城市列表,然后左边迅速切换到直辖市,重新刷新整个pickerview的时候就不会崩溃了。
附git地址:github.com/dota4app/Pi…