我有一个UITableViewCell
,我需要将插页式图像随机放入其中一些。这是有效的,但由于单元格的缓存,图像在表格的下方重复出现。假设我已经预先决定将图像放在单元格 1、12 和 25 中,这些单元格将有它们的图像,但在单元格 1 之后,单元格 4、8 等也可能包含第一个图像。
我猜我需要做的是专门告诉cellForRowAtIndexPath
清除缓存并删除任何图像,如果它不符合添加图像的标准。我该怎么做呢?我已经尝试过else
if 语句来做出决定并分配图像。在那else
方面,我尝试将UIImageView
' 的图像设置为nil
,但这并没有任何区别。
有没有其他方法可以清除缓存以防止这些图像定期向页面发送垃圾邮件?这是我的cellForRowAtIndexPath
方法,当前最后一行中的行else
对图像没有影响,所以他们(我认为)需要用有效的东西替换!
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
{
// Make and allocate the cell if necessary.
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier: @"Cell"];
if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle: UITableViewCellStyleValue1 reuseIdentifier: @"Cell"];
}
cell.lineLabel.text = [[self.fetchedResultsController objectAtIndexPath: indexPath] line];
cell.actorLabel.text = [[self.fetchedResultsController objectAtIndexPath: indexPath] actor];
[cell.lineLabel sizeToFitMultipleLines];
// Get the size each label needs to be when constrained to set width and very long height (8000).
CGSize labelSize = [cell.lineLabel.text sizeWithFont: cell.lineLabel.font constrainedToSize: CGSizeMake(265, 8000)];
if ([[cellsToContainInterstitialImages allKeys] containsObject: [thisLine.lineID stringValue]]) {
UIImageView *interstitialImage = [[UIImageView alloc] init];
NSNumber *cellTypeNumber = [cellsToContainInterstitialImages valueForKey: [thisLine.lineID stringValue]];
kInterstitialCellType cellType = [cellTypeNumber intValue];
if (cellType == kInterstitialCellTypeFirst) {
interstitialImage = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"man.png"]];
}
else if (cellType == kInterstitialCellTypeSecond) {
interstitialImage = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"woman.png"]];
}
else {
interstitialImage = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"child.png"]];
}
[interstitialImage setFrame: CGRectMake(10, cell.lineLabel.frame.size.height + cell.actorLabel.frame.size.height + 10, 150, 150)];
[cell addSubview: interstitialImage];
} else {
UIImageView *interstitialImage = [[UIImageView alloc] init];
[interstitialImage setImage: nil];
}
return cell;
}