我有一个包含图像视图和标签的服装单元格的集合视图,标签是我在"详细信息中设置的值"控制视图,如果我没有设置它,它就不应该出现(如图所示)。 (顺便说一下我使用核心数据)。
问题在于标签(较小的圆圈),只要我删除一个单元格或添加另一个单元格,就会出现一些标签而一些标签不会出现。只有当我重新启动应用程序时,它才会再次出现。
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;
}
}
我非常确定它与细胞的可重用性有关(我注意到当我添加一个没有值的细胞时,然后其他一些有值的细胞不会出现在我的标签上),任何想法如何处理它?</ p>
答案 0 :(得分:1)
很难确切地了解您在描述中遇到的行为。我注意到的一件事是你在某些情况下设置了self.weightLabel.hidden = YES;
,但你从未将其设置为NO
。这可能是重复使用的细胞有时不显示你的体重的原因。
考虑为您的UICollectionViewCell子类实现- (void)prepareForReuse
。这将允许您在重用之前将单元格返回到已知的默认状态,并且您将能够使- (void)configureCellForEntry:(THDiaryEntry *)entry
的逻辑更简单。