2017-11-30 8 views
0

UICollectionViewUICollectionViewCell(カスタムクラス)のボタンがあります。ボタンをクリックすると、背景色が変更されます。最初は完全に動作しますが、メインビューの背景色を変更すると、ボタンの背景色を更新できません。背景色は、配列に格納され、ここで細胞セットアップ関数の:私は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の変数に基づいた配列からその背景色が来るデータの更新時に、セルのボタンの背景色を再描画するように指示するにはどうすればよいでしょうか?

答えて

0

表示する背景色を設定するには、ビューの.backgroundColorプロパティを使用する必要があります。

それ以外では、それぞれtableView.reload()があります。すべてのtableViewデリゲートメソッドが再度呼び出され、セルは指定したデータに再バインドされるため、初期化されていないように扱わなければなりません。また、適切な色が割り当てられていない場合は、黒色がデフォルト色になり、おそらくsectionでも機能しないか、アレイに格納されているデータをチェックする必要があります。それらを印刷する)。ロジックのクリーナー流れについては

ちょうどん:

if indexPath.section == 0 { 
    // do this for section 0 
} else if indexPath.section == 1 { 
    // do this for section 1 
} else { 
    // for all other if any 
} 

希望、これは何らかの方法であなたを助けます...セル内部の

+0

ボタンは、カスタムクラスです。 tappedColorとoriginalColorはボタンの背景色を設定しているので、私はそれをやっています。データを再ロードするだけでは、tappedColorとoriginalColorの値をカラー配列の次の項目に更新するようには見えないので、その背景色の変更は流れません。 – gr8m8

+0

まあ、原因を見つけるためにデバッグするのが最善の方法です。ブレークポイントを設定して、cellForRowAtメソッドをチェックして、配列に正しい値が含まれているかどうかを確認してください。 また、私の答えのようにセクションの値をチェックするif-elseメソッド?セクションとセクション+ 1で配列をインデックスしているので、セクションが2つある場合は0,1と1,2を得ます。 –

関連する問題