UICollectionView
にUICollectionViewCell
(カスタムクラス)のボタンがあります。ボタンをクリックすると、背景色が変更されます。最初は完全に動作しますが、メインビューの背景色を変更すると、ボタンの背景色を更新できません。背景色は、配列に格納され、ここで細胞セットアップ関数の:私は1としてsection
で始まる場合UICollectionViewCellのボタンの背景を変更します。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
print("Rebuilding cells")
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! ColorCollectionViewCell
cell.button.tappedColor = backgroundColors[section]
cell.button.originalColor = backgroundColors[section + 1]
cell.button.delegate = self
cell.button.addTarget(self, action: #selector(didHitButton), for: .touchUpInside)
return cell
}
そこで、それは第一の色であり、適切な背景色(黒でセルのボタンをロードセルを正常に消去するgrid.reloadData()
の数を0に設定します。
しかし、section
を2に設定して総セル数を再設定すると、セルは新しい背景色(セクション2の色は緑色)セクション1から黒色になります。
UICollectionView
に、index
の変数に基づいた配列からその背景色が来るデータの更新時に、セルのボタンの背景色を再描画するように指示するにはどうすればよいでしょうか?
ボタンは、カスタムクラスです。 tappedColorとoriginalColorはボタンの背景色を設定しているので、私はそれをやっています。データを再ロードするだけでは、tappedColorとoriginalColorの値をカラー配列の次の項目に更新するようには見えないので、その背景色の変更は流れません。 – gr8m8
まあ、原因を見つけるためにデバッグするのが最善の方法です。ブレークポイントを設定して、cellForRowAtメソッドをチェックして、配列に正しい値が含まれているかどうかを確認してください。 また、私の答えのようにセクションの値をチェックするif-elseメソッド?セクションとセクション+ 1で配列をインデックスしているので、セクションが2つある場合は0,1と1,2を得ます。 –