我使用if语句,这样只有特定的单元格才能获得图像。在我的测试示例中,只有一个单元格应该获得图像,if语句只运行一次。if语句还会更改标签的文本。标签被正确更改,但图像被添加到多个单元格中,尤其是当我上下滚动时。如何使其不向其他单元格添加额外的图像。
UIImageView *imageView= [[UIImageView alloc]initWithFrame:CGRectMake(114,5, 122, 63)];
if (condition) {
[imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"Placeholder.png"]];
imageView.tag = 777;
[cell addSubview:imageView];
cell.titleLabel.text = [dict valueForKey:@"name"];
cell.titleDescription.text = [dict valueForKey:@"summary"];
} else {
[[cell viewWithTag:777] removeFromSuperview];
}
UITableViewCell是缓存的,所以不总是创建一个新的UIImageView,而是先检查它是否有:
UIImageView * imageView = (UIImageView*)[cell viewWithTag:777];
if (condition) {
if(!imageView) {
imageView= [[UIImageView alloc]initWithFrame:CGRectMake(114,5, 122, 63)];
}
[imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"Placeholder.png"]];
imageView.tag = 777;
[cell addSubview:imageView];
cell.titleLabel.text = [dict valueForKey:@"name"];
cell.titleDescription.text = [dict valueForKey:@"summary"];
} else {
[imageView removeFromSuperview];
}
您可能在一个单元格中添加了多个imageView,所以removeFromSuperView只删除了第一个。
这样做在创建
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
UITableViewCell *cell = [aTableVIew dequeueReusableCellWithIdentifier:@"cell"];
if(cell == nil)
{
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease];
UIImageView *aImgView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 0, 40, 40)];
aImgView.tag = 777;
[cell addSubview:aImgView];
[aImgView release];
}
//use your condition hear onwards to make changes
if(indexPath.section == 0)
{
UIImageView *view = (UIImageView *)[cell viewWithTag:777];
view.image = [UIImage imageNamed:@"peter.png"];
}
else if (indexPath.section == 1)
{
if(indexPath.row == 0 )
{
UIImageView *view = (UIImageView *)[cell viewWithTag:777];
view.image = nil;
}
else
{
UIImageView *view = (UIImageView *)[cell viewWithTag:777];
view.image = [UIImage imageNamed:@"peter.png"];
}
}
return cell;
}
根据要求更改
注意:我没有使用ARC