集合视图中的可重用项目不会正确显示自定义单元格视图

时间:2014-05-27 17:12:52

标签: ios uicollectionview

我有一个包含图像视图和标签的服装单元格的集合视图,标签是我在"详细信息中设置的值"控制视图,如果我没有设置它,它就不应该出现(如图所示)。 (顺便说一下我使用核心数据)。

问题在于标签(较小的圆圈),只要我删除一个单元格或添加另一个单元格,就会出现一些标签而一些标签不会出现。只有当我重新启动应用程序时,它才会再次出现。

collectionview类的相关代码:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    static NSString* identifier =@"cell";
    THCollectionEnrtyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    THDiaryEntry *entry = [self.fetchedResultsController objectAtIndexPath:indexPath];
    [cell configureCellForEntry:entry];
    return cell;
}

来自细胞类的相关代码:

- (void)configureCellForEntry:(THDiaryEntry *)entry {


    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEEE, MMMM d yyyy"];
   // NSDate *date = [NSDate dateWithTimeIntervalSince1970:entry.date];

   // self.dateLabel.text = [dateFormatter stringFromDate:date];

    self.mainImageView.frame = self.contentView.bounds; //fill it even tho we dont realy need

    if (entry.imageData) {
        self.mainImageView.image = [UIImage imageWithData:entry.imageData];
    } else {
         self.mainImageView.image = [UIImage imageNamed:@"icn_noimage"];
    }



    self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame) / 2.0f;
    self.weightLabel.layer.cornerRadius = CGRectGetWidth(self.weightLabel.frame)/ 2.0f;
    self.weightLabel.text = entry.weight;
    if ([self.weightLabel.text isEqualToString:@"n/a"] || [self.weightLabel.text isEqualToString:@""] ) {
        self.weightLabel.hidden = YES;
    }
}

enter image description here

我非常确定它与细胞的可重用性有关(我注意到当我添加一个没有值的细胞时,然后其他一些有值的细胞不会出现在我的标签上),任何想法如何处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

很难确切地了解您在描述中遇到的行为。我注意到的一件事是你在某些情况下设置了self.weightLabel.hidden = YES;,但你从未将其设置为NO。这可能是重复使用的细胞有时不显示你的体重的原因。

考虑为您的UICollectionViewCell子类实现- (void)prepareForReuse。这将允许您在重用之前将单元格返回到已知的默认状态,并且您将能够使- (void)configureCellForEntry:(THDiaryEntry *)entry的逻辑更简单。