2017-01-12 1 views
0

UICollectionViewを使用してデータを表示しています。私は各セルに1つのボタンを持っています。特定のインデックス(例:9)でボタンをクリックすると、すべてのセルのボタンイメージを変更したいと思います。どのようにそれを行うことを提案することができますか?すべてのUICollectionViewセルのボタンイメージを変更するにはどうすればいいですか?

+0

はいあなたはすべてのcollectionviewcellボタン画像のためにセット選択フラグでそれを行うことができます。ボタンクリックでコレクションビューをリロードするだけです。 –

+0

コレクションを再読み込みする – sohil

+0

ボタンのクリックを識別するためのブール値を設定し、それに応じてImageを使用するロジックを追加することができます。 – KrishnaCA

答えて

1

すべての可視セルをループしてイメージを変更します。たとえば:オフスクリーン細胞について

for (CustomCellClass *cell in collectionView.visibleCells) { 
    [cell.button setImage:[UIImage imageNamed:@"new image"] forState:UIControlStateNormal]; 
} 

、私はそれらのセルにユーザーがスクロールとしてcollectionView:cellForItemAtIndexPath:に新しいイメージを設定してくださいます。

+0

の後に表示されるセルを単にリロードするだけで、 'collectionView:cellForItemAtIndexPath:'でそれらをすべて行うのはなぜですか? – Honey

+0

このようにすると、データをリロードする必要がなくなります。 – mattsson

+0

これは良いです。すべてのセルのデータを再読み込みするのは良い考えではありません – KrishnaCA

0

ロジックをこのようにcellForItemAtIndexPathに追加するだけです。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 

    if (self.buttonClicked) { // boolean check 
     [cell.newButton setImage:buttonClickedImage]; 
    }else { 
     [cell.newButton setImage:buttonNotClickedImage]; 
    } 

    return cell; 
} 

ボタンをクリックすると、表示されているすべてのセルをリロードすることもできます。

[self.collectionView reloadItemsAtIndexPaths:self.collectionView.indexPathsForVisibleItems]; 

よりよいこの答えをするために、編集内容を提案するお気軽に:)

関連する問題