2013-02-25 88 views
1

我的UICollectionView的單元格有一個contentview,加載後背景顏色爲白色。用戶可以通過選擇單元格,將單元格的contentview的背景顏色更改爲青色,假定布爾值(isSplitting)設置爲YES。當我有更多的細胞,然後在屏幕之外的如何在滾動時保持UICollectionViewCells的背景顏色不變?

enter image description here

我的問題出現了,並且用戶已經選定的細胞,從而改變了他們的內容查看的背景色青色。

我有一些實例,其中青色的單元格滾動出視圖並且滾動回來時是白色的。我還有一些情況,其中非青色的單元格滾動到視圖中並且是青色的。

據我所知,這些細胞正在出院重新使用,並在加載到不同的indexpath中時保留其背景顏色。

我已經解決了在滾動查看時未選中的單元格變成青色的問題。但是我還沒有能夠解決某些選定單元格滾動進入和退出時失去青色的問題。

這裏是我現有的邏輯cellForItemAtIndexPath

if (!isSplitting) { 
     cell.contentView.backgroundColor = [UIColor whiteColor]; 
    } 
    else{ 
     for (NSIndexPath *collectionIndexPath in [self.myCollectionView indexPathsForSelectedItems]) { 
      if (indexPath == collectionIndexPath) { 
       cell.contentView.backgroundColor = [UIColor cyanColor]; 
       break; 
      } 
      else{ 
       cell.contentView.backgroundColor = [UIColor whiteColor]; 
      } 
     } 
    } 

我知道正確的單元格確實被選中,因爲上面的循環使用相同的操作會產生所需的結果。如果我選擇最初的幾個項目(將它們轉爲青色),滾動到右側並選擇第10個項目,邏輯似乎會崩潰。當我向左滾動時,第一對情侶仍然是青色,但在滾動到右側時,第十位回到白色。

+0

什麼是背後isSplitting邏輯? – 2013-02-25 06:05:35

回答

1

使用isEqual:方法的indexPaths比較,而不是==

if ([indexPath isEqual:collectionIndexPath]) { 
+0

這解決了它!非常感謝。 – IkegawaTaro 2013-02-25 06:42:18