multiselect实现单选_UICollectionMultiselect(无限层级多选、无限层级单选)

本文介绍了一个无限层级的多选与单选联动选择功能的实现,通过UICollectionView嵌套UITableView实现。文章详细讲解了实现思路、代码分析,包括多选、单选的简单使用,模型设计,以及数据初始化和处理方法。
摘要由CSDN通过智能技术生成

最近在做项目,需要弄一个多层级多选(层级数量不定)的联动选择功能,本来想在github或者cocoachina找一下基本样例或者第三方库的,但是找到的都是限制层级的,一般为二层级、三层级,并不满足要求,于是自己抽时间写了一个,希望各位给出指点或意见。

1、先上一波操作

687d2db10bd1

2、实现思路

现在我实现的方式是上下两个UICollectionView,

a、 上面的UICollectionView(下面简称:organizationCollectionView)

主要负责层级的展开、收起、选择。由于层级是不确定的,用UIScrollView的话,层级过多,也无释放,内存会可能过高,所以这里选中UICollectionView实现每个UICollectionViewCell内再嵌套一个UITableView,

b、 下面的UICollectionView(下面简称:selectCollectionView),主要负责展现已经选中的层级,并且支持删除。

3、代码分析

a、多选简单使用

687d2db10bd1

多选

b、 单选简单使用

687d2db10bd1

单选

c、GZTModel,model的设计

687d2db10bd1

model设计

主要考虑是嵌套模型的model(model里面嵌套一个子model,但是两个model的数据格式是一样的,都是GZTModel)。为了解析这种类型数据,这里我引入了ObjectMapper,这个第三方库能有效帮我解析children这个数组,目前经测试,20个层次是没问题的。

d、organizationCollectionView和相关数据的初始化

687d2db10bd1

organizationCollectionView初始化

organizationCollectionView主要注意边距、布局方向的设置,重点是organizationList(数组)、organizationNode(字典)

organizationList:主要用于存储后面organizationCollectionView每一个cell展开内部UITableView(后续简称tableView)的数据源

organizationNode:以当前的tableView的row作为键,存储和更新每次上述tableView中选择的model(每个cell对应的数据),用于后面寻找每一个被点击的model的父节点的model,刷新父节点名下被选中的个数。

e、selectOrganization()  主要实现的功能

687d2db10bd1

主要是获取每次点击的model的children,即organizationCollectionView下一个cell展示的内容

687d2db10bd1

在多选的情况下,主要是处理父节点的children中有几个别点击到的model,并记录

687d2db10bd1

单选的情况下,主要用于记录当前选中的数据model。

d、selectCollectionView和相关数据的初始化

687d2db10bd1

这里的主要需要注意selectList,这个数据是数组嵌套数组,外层主要代表被选择的个数;里面数据代表被选中的数据,从第一层数据到该数据的所有model。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值