有关联数据选择器的开发

最近在写一个省市联动选择器,类似下面这种形式的


Snip20171124_105.png

当省发生变动时,会导致城市选择列表发生变动。
在开始讲解之前,大家可以复习一下UIPickerView的原理:
http://blog.csdn.net/explore_zhang/article/details/51298540
其中注意下:
UIPickerView 显示数据的步骤:

  1. 加载数据源。
  2. 设置控制器是当前 UIPickerView的数据源对象和代理对象。
  3. 实现数据源方法numberOfComponentsInPickerView:返回列的个数。
  4. 实现数据源方法pickerView:numberOfRowsInComponent:返回每列的行数。
  5. 实现代理方法pickerView:titleForRow:,返回每行的数据内容。
  6. 通过代理方法pickerView:didSelectRow:inComponent:来监听UIPickerView的选择事件,例如将当前选中项的数据显示到指定的Label上。

我最初在步骤4中,针对省份的改变来,修改数据源
结果现象是:
向下滑动省份时,省份与城市联动显示还算正常,
向上滑动省份时,省份与城市显示出现异常,数据不一致。

跟踪代码显示:
向下滑动省份时,row变化是0,1,2,3,4,5......
而向上滑动省份时,row变化是1、4、5、7、9、2、3、6.....(诡异的情况)

如果这样时时修改数据源,会造成数据频繁修改,而且修改顺序不一致。这里可能牵扯到多线程。
如果滚动很快,数据源修改地也会特别快,很容易出现城市与省份不匹配的情况概率大大提高。

解决方法:
在第五步的时候,再去修改数据源,这样数据源更新不会那么频繁。同时只需要一次reloadAllComponent即可。
这么改的原因是:第五步一定是滑动运行到最后一步的时候。

你可能感兴趣的:(有关联数据选择器的开发)