可重用的 UICollectionViewCell 不刷新

Reusable UICollectionViewCell doesn't refreshing

我的 UICollectionViewCell 在情节提要中有一个按钮,并从文档目录中动态设置按钮数量的背景图像,造成一些问题,例如某些按钮背景图像不刷新,即使我关闭控制器并重新加载它们也会保留旧图像那个控制器,问题仍然存在。如何解决这个问题?

在我的 CollectionViewController 中:

- (NSString *)getBackgroundImage:(NSIndexPath *)indexPath {

    NSArray *indexes = [self.allColors[indexPath.section] objectForKey:@"indexes"];

    return [NSString stringWithFormat:@"%@/%@/%@/combimeter_button/combimeter_%ld_%@@2x.png", [self.documentDirectory getDocumentsDirectory], _selectedCar, _selectedCar, (long)[indexes[indexPath.row] integerValue], [self getColorKey:indexPath.section]];
}


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    CustomCollectionViewCell *cell = (CustomCollectionViewCell *) [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];

    cell.layer.borderWidth = 2.0f;
    cell.layer.borderColor = [[self getBackgroundColor:indexPath.section] CGColor];
    [cell.cellButton setBackgroundImage:[UIImage imageNamed:[self getBackgroundImage:indexPath]] forState:UIControlStateNormal];
    [cell.cellButton addTarget:self action:@selector(combimeterButtonDidSelected:) forControlEvents:UIControlEventTouchUpInside];

    return cell;
}

在我的自定义 collectionView 单元格中:

@interface CustomCollectionViewCell : UICollectionViewCell

@property (weak, nonatomic) IBOutlet UIButton *cellButton;

@end

@implementation CustomCollectionViewCell

-(void)prepareForReuse {
    NSLog(@"Is it possible to clear here ? but this method didn't call in my code");
}

@end

尝试在创建新视图之前删除所有以前的视图:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    CustomCollectionViewCell *cell = (CustomCollectionViewCell *) [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];

    for (UIView *subview in [cell subviews]) {
        [subview removeFromSuperview];
    }

    ...
}

可能问题是 imageNamed: 缓存了图像。请尝试使用 imageWithContentsOfFile: