2017-02-18 6 views
0

各セルビューにバッジを追加して、コレクションビューに複数の選択肢を表示しようとしています。最初の(選択されていない)イメージは正しく設定されますが、ビューは決して選択されたバージョンに更新されません。手動で設定しようとしましたが、選択した画像が機能し、セル内に表示されていることがわかりました。 NSLogは、 'selected'が期待通りにトグルしていることを示し、ブレークポイントはイメージへの適切な割り当てが実行されていることを示します。間言を言い訳すると、SOはうまく再生されず、真夜中の後です。サブクラス化されたUICollectionViewCellは画像を更新しません

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    SMListCollectionViewCell *cell = (SMListCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 

if (!indexPath.row) 
{ 
    cell.image.image = [UIImage imageNamed:@"Add"]; 
    cell.label.text = @"Create New"; 
    cell.imageBadge.hidden = YES; 
} 
else 
{ 
    cell.image.image = [UIImage imageNamed:[listManager.myLists[indexPath.row-1] valueForKey:keyDetailImage]]; 
    cell.label.text = [listManager.myLists[indexPath.row-1] valueForKey:keyName]; 
    cell.imageBadge.hidden = !self.editing; 
    NSLog(@"selected is %d",cell.selected); 
    if (cell.selected) 
    { 
     cell.imageBadge.image = self.badgeSelected; 
    } 
    else 
    { 
     cell.imageBadge.image = self.badgeUnselected; 
    } 
} 
return cell; 
} 
+0

さらに、cellForItemAtIndexPath:は今にモーフィングします。セルがいつも変更され、再描画されていることを忘れないでください**。 ***あなたのデータ***で何かを "選択"しなければなりません。もしあなたが "車"の配列を持っているなら、それらのうちの10個を選択し、 "3"を選択します。あなたは車の中にフィールドを持っていなければなりません。そして、ナンバー3では、その車を「選択された」*として設定しなければなりません。 'tableView#cellForRowAt'でセルを描画するときに、その品質を使用する必要があります。 – Fattie

+0

@JoeBlow以下の_answers_で提案したアプローチについてどう思いますか教えてください。 – ystack

答えて

1

Woah!cellForAtIndexPath:cellselected状態を確認すると、ではなく、の作業が保証されます。

カスタムセルサブクラスSMListCollectionViewCellをすでに作成しているので、そのselectedセッター&をそこのセルに表示するように切り替える必要があります。

imageBadge属性がすでにSMListCollectionViewCell.hにさらされているので、唯一.mの迅速なスニペットは次のようになります。これは、セル選択状態に応じて画像のトグル処理する

// SMListCollectionViewCell.m 

#import "SMListCollectionViewCell.h" 

@implementation SMListCollectionViewCell 

... 

- (void)setSelected:(BOOL)selected{ 
    [super setSelected:selected]; 

    if (selected){ 
     cell.imageBadge.image = self.badgeSelected; 
    } 
    else { 
     cell.imageBadge.image = self.badgeUnselected; 
    } 
} 

@end 

。それもこれを行うには非常に難しいことです

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    SMListCollectionViewCell *cell = (SMListCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 

    if (!indexPath.row){ 

     cell.image.image = [UIImage imageNamed:@"Add"]; 
     cell.label.text = @"Create New"; 
     cell.imageBadge.hidden = YES; 
    } 
    else { 

     cell.image.image = [UIImage imageNamed:[listManager.myLists[indexPath.row-1] valueForKey:keyDetailImage]]; 
     cell.label.text = [listManager.myLists[indexPath.row-1] valueForKey:keyName]; 
     cell.imageBadge.hidden = !self.editing; 
    } 

    return cell; 
} 
+0

@ josh-caswell編集に感謝しましたが、私はemojisが楽しいと思いました! :) haha​​ha – ystack

+0

私たちは本当にここで彼らのために行っていません。しかし、良い答えです。 –

+0

あなたがそれを気に入ってよかったです。 – ystack

関連する問題