2017-02-18 89 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

這是令人難以置信很難做到這一點。不要忘記**單元格正在改變,並一直在重繪**。你必須在數據中「選擇」***。所以如果你有一組「汽車」,說他們10,並選擇「3」。你必須在汽車領域擁有一個領域,而在第三方面,你必須將汽車設置爲「選定」*。那麼你有當你畫的細胞'的tableView#cellForRowAt' – Fattie

+0

@JoeBlow讓我知道你怎麼想,我在下面_answers_提出的方法使用該質量。 – ystack

回答

1

哇!從內部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 

這將處理取決於細胞選擇狀態圖像的切換。

此外,cellForItemAtIndexPath:現在就變身到:

- (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

相關問題