使用if语句向特定UICell添加一个图像会将其添加到多个UICells Objective-c



我使用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

最新更新