collectionView 實(shí)現(xiàn) item 點(diǎn)擊選中與取消

前言

最近項(xiàng)目里需要實(shí)現(xiàn)一種效果,就是一類(lèi)標(biāo)簽放一塊,可以分多種類(lèi)別,只能選中一個(gè)標(biāo)簽,而且選中標(biāo)簽要改背景、顏色、字體等;開(kāi)始覺(jué)得挺好實(shí)現(xiàn)的,標(biāo)簽打開(kāi)類(lèi)似于好友列表界面,選中系統(tǒng)帶的有,但是實(shí)際操作起來(lái)遇到好多麻煩,跑遠(yuǎn)了,貼上一張帥照

看到就想笑

首先給一張我們的需求圖

需求圖


再給一個(gè)我們實(shí)現(xiàn)之后的效果動(dòng)圖


效果圖

具體實(shí)現(xiàn)過(guò)程

1. 實(shí)現(xiàn)過(guò)程中遇到的問(wèn)題

開(kāi)始我用 btn 做的,在Button中的點(diǎn)擊方法中改變他的狀態(tài),然后在懶加載的時(shí)候 button 的各種顏色字體啦都處理好,然后我想通過(guò)傳過(guò)去在 controller里邊通過(guò)button的 selected來(lái)實(shí)現(xiàn)這些效果,初級(jí)效果實(shí)現(xiàn)了,但是效果很不理想,因?yàn)闆](méi)有考慮到cell復(fù)用的因素,導(dǎo)致選中的 item 不固定,在你點(diǎn)擊 header打開(kāi)再關(guān)閉的時(shí)候,選中的cell會(huì)跑,很神奇吧,所以我們的選中效果要放到collectionView 上做。

2.具體實(shí)現(xiàn)

首先要解決的是item會(huì)跑的問(wèn)題,我們只需要在定義cell時(shí)候記住他的狀態(tài)就行,所以我在自定義的 cell 類(lèi)的 . h 里設(shè)一個(gè)BOOL類(lèi)型的selected屬性,并且在 . m 文件里寫(xiě)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里邊做處理了

其中中心思想就是找到我們點(diǎn)擊的那個(gè) cell 并且更改他的selected屬性,而剩余的cell的的狀態(tài)都要保證未打開(kāi),所以我們就整一個(gè)數(shù)組放狀態(tài)信息,

創(chuàng)建的存放選中狀態(tài)的數(shù)組 dataSouceArray

:那個(gè)cnt<50 不用太關(guān)注,他只要大于等于你的所有 cell的和就行


下一步就是在 collectionView 的代理方法中實(shí)現(xiàn) cell 初始化的設(shè)定


創(chuàng)建 cell 時(shí)設(shè)置狀態(tài)
點(diǎn)擊更改 cell 的 selected

具體我是for 循環(huán)出來(lái)點(diǎn)擊 cell 改變他的selected=!_selected,然后剩余的都設(shè)成0。



好了到了這一步基本上都完成了,喜歡的點(diǎn)一個(gè)贊。

PS :我沒(méi)有寫(xiě) header 點(diǎn)擊打開(kāi)section 應(yīng)該大家都會(huì)所以就不寫(xiě)了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容