[英]UITableView Cell showing wrong image
我有一个带有两个单元格的UITableView
。 一个包含图片的单元格,另一个不含图片的单元格。 当没有图像的单元格显示在具有图像的单元格下面时,一切都很好( 图像1 )。 但是,当我对列表进行排序时,没有图像的单元格显示在带有图像的单元格上方,则没有图像的单元格显示的图像与另一个单元格相同( 图像2 )。 我已经为这个问题苦苦挣扎了好几天,但是我找不到问题出在哪里。
这是设置图像的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
Object *myObject = [[Datamodel sharedInstance] objectAtIndex:(int)indexPath.row];
cell.textLabel.text = myObject.name;
if([myObject.imageNames count] != 0 && !myObject.thumbnail)
{
myObject.thumbnail = [[NSString alloc] initWithString:[myObject.imageNames objectAtIndex:0]];
}
if(myObject.thumbnail)
{
NSLog(@"Setting thumbnail");
NSString *pathToImgData= [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents" ]stringByAppendingPathComponent:@"ImgData"];
NSMutableString *imgPath = [[NSMutableString alloc] initWithString:pathToImgData];
[imgPath appendString:@"/"];
[imgPath appendString: myObject.thumbnail];
UIImage* image = [UIImage imageWithContentsOfFile:imgPath];
UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(8, 8, 128, cellHeight-16)];
imv.image = image;
[cell addSubview:imv];
}
return cell;
}
关于控制台输出,只有一个对象进入if(myObject.thumbnail)
条件,因此仅对于应该具有图像的单元格设置图像:
2015-03-01 ***** Cell with image *****
2015-03-01 --> Setting the image
2015-03-01 ***** Cell wihout image *****
2015-03-01 --> NOT setting the image
2015-03-01 ***** Cell without image *****
2015-03-01 --> NOT setting the image
2015-03-01 ***** Cell with image *****
2015-03-01 --> Setting the image
以及对列表进行排序的代码:
-(void)sortList{
NSSortDescriptor *sortObjectName = [NSSortDescriptor sortDescriptorWithKey:@"objectName" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 caseInsensitiveCompare:obj2];
}];
[self.arrayData sortUsingDescriptors:@[sortObjectName]];
}
您的问题是,您不会设置您不想设为nil
的单元格的图像。
UITableViewCells
被重用,因此您需要在单元格中配置所需或不需要的每个值。
只要弄清楚是否需要显示图像,就可以设置图像,如果不需要,则设置
UIImageView.image = nil;
如果没有缩略图,则必须删除图像,因为单元已被重用:
if(myObject.thumbnail)
{
NSLog(@"Setting thumbnail");
NSString *pathToImgData= [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents" ]stringByAppendingPathComponent:@"ImgData"];
NSMutableString *imgPath = [[NSMutableString alloc] initWithString:pathToImgData];
[imgPath appendString:@"/"];
[imgPath appendString: myObject.thumbnail];
UIImage* image = [UIImage imageWithContentsOfFile:imgPath];
UIImageView *imv = [cell viewWithTag:1234];
if (!imv) {
imv = [[UIImageView alloc]initWithFrame:CGRectMake(8, 8, 128, cellHeight-16)];
[cell addSubview:imv];
imv.tag = 1234;
}
imv.image = image;
} else {
UIView *imageView = [cell viewWithTag:1234];
if (imageView) {
[imageView removeFromSuperview];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.