美文网首页iOS
collectionView 实现 item 点击选中与取消

collectionView 实现 item 点击选中与取消

作者: Bales_chu | 来源:发表于2017-06-29 20:49 被阅读80次

    前言

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

    看到就想笑

    首先给一张我们的需求图

    需求图

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

    效果图

    具体实现过程

    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的的状态都要保证未打开,所以我们就整一个数组放状态信息,

    创建的存放选中状态的数组 dataSouceArray

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

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

    创建 cell 时设置状态 点击更改 cell 的 selected

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

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

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

    相关文章

      网友评论

        本文标题: collectionView 实现 item 点击选中与取消

        本文链接:https://www.haomeiwen.com/subject/prjvcxtx.html