要解決cell重用錯(cuò)亂的問題首先要了解重用的機(jī)制是什么,重用簡單明了的來講就是:
注冊了cell后,使用了重用機(jī)制,那么系統(tǒng)最多只會(huì)創(chuàng)建你界面能看見的最多個(gè)數(shù)的cell視圖+1,無論你滑動(dòng)出現(xiàn)多少個(gè)cell他實(shí)際創(chuàng)建的cell只有你界面能看到的最多個(gè)數(shù)個(gè)+1,比如你能看見最多6個(gè),當(dāng)他出現(xiàn)新的cell的時(shí)候這個(gè)cell其實(shí)就是去緩存池里取得那一個(gè)空閑的cell,這就是為什么要+1的原因.
了解完了重用機(jī)制,那么我們了解一下為什么會(huì)錯(cuò)亂:
cell重用導(dǎo)致從緩存池里取出該cell的時(shí)候這個(gè)剩余的cell還有上次用過該cell的一些屬性,比如某個(gè)按鈕的背景圖.
解決辦法如下:
我在網(wǎng)上搜了很多資料,剛開始的時(shí)候也不明白他們說了些什么,隨著開發(fā)的時(shí)間,我覺得有一些是誤導(dǎo)
解決辦法1
tableview和collectionview的cell別進(jìn)行重用,摒棄[_collectionView dequeueReusableCellWithReuseIdentifier:cellId2 forIndexPath:indexPath];該方法,使用[tableView cellForRowAtIndexPath:indexPath];或者重新alloc,**********cell少的時(shí)候可以使用,消耗資源較大
解決辦法2
如果是圖片問題 那你去下載一個(gè)sd_webimage三方庫,用它加載圖片就能很好解決錯(cuò)亂問題
解決辦法3
如果是本地圖片或者是本地按鈕上加載的圖片,那么你在每次加載cell之前,取到cell上出現(xiàn)錯(cuò)亂的該空間,將其image設(shè)置為nil,例如:[cell.button setImage:nil forState:UIControlStateNormal];然后再重新賦值:[cell.button setImage:[UIImage imageNamed:@"bsxx_icon1"] forState:UIControlStateNormal];就可以很好地解決啦
示例代碼如下:
可以從下邊粘貼復(fù)制:
```
JJDetailsCollectionCellTwo *cell= [_collectionView dequeueReusableCellWithReuseIdentifier:cellId2 forIndexPath:indexPath];
if (!cell) {
cell=[[[NSBundle mainBundle]loadNibNamed:@"JJDetailsCollectionCellTwo" owner:cellId2 options:nil]lastObject];
}
[cell.button setImage:nil forState:UIControlStateNormal];
if (indexPath.item==1 && indexPath.section==1) {
[cell.button setImage:[UIImage imageNamed:@"bsxx_icon1"] forState:UIControlStateNormal];
}else{
[cell.button setImage:[UIImage imageNamed:@"bsxx_icon2"] forState:UIControlStateNormal];
}
cell.button.tag=indexPath.section*1000+indexPath.row;
return cell;
```
如果幫到你了,點(diǎn)個(gè)贊能讓我高興地蹦起來