每当我删除一个单元格时,之前位于其中的单元格图像不会消失。 例如,单元格使用所有三个图像视图,并被删除并替换为使用其中一个图像视图的单元格。保留了具有前一单元(已删除)的图像的两个图像视图。 当我删除一个单元格时,我从nsmutablearray中删除该对象,并在uitableview上执行reloadData。
我制作了一个类似于
的自定义uitableviewcell@interface MyPetTableViewCell : UITableViewCell
@property (nonatomic, weak) IBOutlet PetNameLabel *petName;
@property (nonatomic, weak) IBOutlet UIImageView *imageOne;
@property (nonatomic, weak) IBOutlet UIImageView *imageTwo;
@property (nonatomic, weak) IBOutlet UIImageView *imageThree;
@end
我的UITableView设置如下
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"PetCell";
MyPetTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
PetResponse *petItem = self.petListResponse.PetList[indexPath.row];
NSString *petNameItem = petItem.PetName;
NSLog(@"PET NAME : %@",petNameItem);
NSLog(@"NUMBER OF IMAGES : %lu", (unsigned long)petItem.EncodedImages.count);
for (int i = 0; i < [petItem.EncodedImages count]; i++) {
NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:petItem.EncodedImages[i] options:0];
UIImage *image = [UIImage imageWithData:decodedData];
if (i == 0) {
cell.imageOne.image = image;
} else if (i == 1)
{
cell.imageTwo.image = image;
} else if (i == 2)
{
cell.imageThree.image = image;
}
}
cell.petName.text = [NSString stringWithFormat:@"%@ :",petNameItem];
UIColor *customcolor = [UIColor colorWithRed:11/255.0f green:64/255.0f blue:64/255.0f alpha:0.5f];
cell.petName.backgroundColor = customcolor;
cell.petName.layer.cornerRadius = 5;
cell.petName.numberOfLines = 0;
[cell.petName sizeToFit];
[cell setBackgroundColor:[UIColor clearColor]];
NSLog(@"Returning Cell");
return cell;
}
答案 0 :(得分:0)
很难猜出会发生什么,但有一种可能性如下:
表格视图单元格被重复使用。因此,当您将例如子视图添加到表格视图单元格,并且表格视图的相应行被滚动到屏幕外时,单元格(带有子视图!)将被放回到重用池中。如果应显示新的表格行,则可能是从重用池中取出现在未使用的单元格(带有旧的子视图),并显示旧的子视图。
在这种情况下你能做些什么来&#34;准备一个表格视图单元格以便重复使用&#34;,使用方法
- (void)prepareForReuse
在此方法中,您可以删除所有旧的子视图,请参阅docs。
答案 1 :(得分:0)
听起来像是细胞重用问题。正如苹果文档所说:
tableView中的表视图委托:cellForRowAtIndexPath:should 重复使用单元格时,请始终重置所有内容。
一种可能的解决方案是在分配新图像之前将所有图像设置为nil
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"PetCell";
MyPetTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
PetResponse *petItem = self.petListResponse.PetList[indexPath.row];
NSString *petNameItem = petItem.PetName;
NSLog(@"PET NAME : %@",petNameItem);
NSLog(@"NUMBER OF IMAGES : %lu", (unsigned long)petItem.EncodedImages.count);
cell.imageOne.image = nil;
cell.imageTwo.image = nil;
cell.imageThree.image = nil;
for (int i = 0; i < [petItem.EncodedImages count]; i++) {
NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:petItem.EncodedImages[i] options:0];
UIImage *image = [UIImage imageWithData:decodedData];
if (i == 0) {
cell.imageOne.image = image;
} else if (i == 1)
{
cell.imageTwo.image = image;
} else if (i == 2)
{
cell.imageThree.image = image;
}
}
cell.petName.text = [NSString stringWithFormat:@"%@ :",petNameItem];
UIColor *customcolor = [UIColor colorWithRed:11/255.0f green:64/255.0f blue:64/255.0f alpha:0.5f];
cell.petName.backgroundColor = customcolor;
cell.petName.layer.cornerRadius = 5;
cell.petName.numberOfLines = 0;
[cell.petName sizeToFit];
[cell setBackgroundColor:[UIColor clearColor]];
NSLog(@"Returning Cell");
return cell;
}