1、单行选中
近期所做的项目其中一个界面效果图如下所示:
设计给出的需求文档上的说明是,点击列表中任意一行,其他行都收回,如果再点击一次该行,则所有行收回。好了需求明确,当然这个界面首选用UITableView来实现,整个效果就是用UITableView的单行选中来实现的,当选中该行时,该行的高度改变。
实现单行选中的思路是:
(1)、定义一个整数CellRow来记录上一次点击的行数,并在viewDidLoad方法中将值设为-1;
(2)、在UITableView的didSelectRowAtIndexPath回调方法中赋值,完成后刷新UITableVIew;
(3)、考虑到再点击一次需要收回,所有应该做出判断,当前点击行数和上一次点击行数相等时,把CellRow的值设为默认值,所以最终UItableView的didSelectRowAtIndexPath回调方法中的代码为:
(4)、在UITableView的heightForRowAtIndexPath回调方法中判断,UITableView点击的行数的高度刷新其他的行数不改变。
OK,整体的思路就是如此,最终我做出来的效果入下图所示:
2、多行选中
(1)、在获取到数据后,对数据源数组进行一次遍历,在数据源数组的每个元素都增加一个属性isShow用来记录UITableView对应的行是否选中,该属性默认值为0表示对应的行数没有选中,如果等于1则对应的行数表示选中,此处我使用了MJExtension框架将获取到的数据转换为Model;
(2)、当点击时可以获取到点击的行数,对数据源数组中对应行数的isShow属性值做修改,同时刷新UITableView 所点击的行数;
(3)、在UITableView的返回高度heightForRowAtIndexPath回调方法中做出判断;
以上是UITableView多行选中的思路,由于这是公司的项目不能提供代码了,我写了个Demo供参考,请戳这里。