collectionView 实现 item 点击选中与取消

前言

最近项目里需要实现一种效果,就是一类标签放一块,可以分多种类别,只能选中一个标签,而且选中标签要改背景、颜色、字体等;开始觉得挺好实现的,标签打开类似于好友列表界面,选中系统带的有,但是实际操作起来遇到好多麻烦,跑远了,贴上一张帅照

collectionView 实现 item 点击选中与取消_第1张图片
看到就想笑

首先给一张我们的需求图

collectionView 实现 item 点击选中与取消_第2张图片
需求图


再给一个我们实现之后的效果动图


collectionView 实现 item 点击选中与取消_第3张图片
效果图

具体实现过程

1. 实现过程中遇到的问题

开始我用 btn 做的,在Button中的点击方法中改变他的状态,然后在懒加载的时候 button 的各种颜色字体啦都处理好,然后我想通过传过去在 controller里边通过button的 selected来实现这些效果,初级效果实现了,但是效果很不理想,因为没有考虑到cell复用的因素,导致选中的 item 不固定,在你点击 header打开再关闭的时候,选中的cell会跑,很神奇吧,所以我们的选中效果要放到collectionView 上做。

2.具体实现

首先要解决的是item会跑的问题,我们只需要在定义cell时候记住他的状态就行,所以我在自定义的 cell 类的 . h 里设一个BOOL类型的selected属性,并且在 . m 文件里写setter方法

@synthesize beSelected = _beSelected;

- (BOOL)isBeSelected

{

return _beSelected;

}

- (void)setBeSelected:(BOOL)beSelected

{

_beSelected = beSelected;

self.categoryLabel.backgroundColor = _beSelected?RGBA(42.0, 144.0, 215.0, 1):[UIColor whiteColor];

self.categoryLabel.textColor = _beSelected?[UIColor whiteColor]:[UIColor blackColor];

self.categoryLabel.layer.borderColor = RGBA(233.0, 233.0, 233.0, 1.0).CGColor;

self.categoryLabel.layer.borderWidth = 0.5;

}



下面我们就需要在 controller里边做处理了

其中中心思想就是找到我们点击的那个 cell 并且更改他的selected属性,而剩余的cell的的状态都要保证未打开,所以我们就整一个数组放状态信息,

collectionView 实现 item 点击选中与取消_第4张图片
创建的存放选中状态的数组 dataSouceArray

:那个cnt<50 不用太关注,他只要大于等于你的所有 cell的和就行


下一步就是在 collectionView 的代理方法中实现 cell 初始化的设定


collectionView 实现 item 点击选中与取消_第5张图片
创建 cell 时设置状态
collectionView 实现 item 点击选中与取消_第6张图片
点击更改 cell 的 selected

具体我是for 循环出来点击 cell 改变他的selected=!_selected,然后剩余的都设成0。



好了到了这一步基本上都完成了,喜欢的点一个赞。

PS :我没有写 header 点击打开section 应该大家都会所以就不写了

你可能感兴趣的:(collectionView 实现 item 点击选中与取消)