title: How to clear a tableview cell for reuse
body: <p>I'm rewriting some code to improve tableview performance. I'm trying to implement the dequeueReusableCellWithIdentifier but not having much luck.</p>
  
  <p>When a cell moves off screen and back on again, it's contents are duplicated (each time it goes off and back into screen). The contents of the cell are also appearing in other cells when they shouldn't be. </p>
  
  <p>It seems to me the content needs clearing when the cell is reused but I can't figure it out.</p>
  
  <p>The cells themselves consist of 4 CUSTOM image buttons and 4 labels, in a row:</p>
  
  <pre><code>[ ]  [ ]  [ ]  [ ]
  abc  abc  abc  abc
  </code></pre>
  
  <p>Some cells might have all these images/labels populated, others might only have 1 or 2.</p>
  
  <p>Code below..</p>
  
  <pre><code>- (UITableViewCell *)tableView:(UITableView *)thetableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
      //NSString *CellIdentifier = [NSString stringWithFormat:@"Cell",indexPath.section];
      static NSString *CellIdentifier = @"Cell";
  
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if (cell == nil) {
          cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
      }
      else
      {
          //Tried this to clear old contents but doesn't make a difference
          for (HomeScreenButton* b in cell.subviews)
          {
              NSLog(@"RemovedOldButton");
  
              b = nil;
          }
          for (UILabel* b in cell.subviews)
          {
              NSLog(@"RemovedOldLabel");
  
              b = nil;
          }
      }
      cell.accessoryType = UITableViewCellAccessoryNone;
      cell.selectionStyle = UITableViewCellSelectionStyleNone;
  
      int section = indexPath.section;
  
  
      NSMutableArray *sectionItems = [sections objectAtIndex:section]; //Gets the array of objects for this section 
      if (sectionItems.count == 0) return cell;
  
      LepidEntity * le = [sectionItems objectAtIndex:0];// Gets the object for this section (family/group etc.)
  
  
      if (([le.type isEqualToString:@"family"]) || ([le.type isEqualToString:@"group"]))
      {
          NSMutableArray * tmpAnn;
          int annCount = 0;
          //Get annotations for this family/group
          if ([le.type isEqualToString:@"family"])
          {
              Family * family = (Family *)le;
              tmpAnn = [[NSMutableArray alloc]initWithArray:family.annotations];
          }
          else
          {
              Group * group = (Group *)le;
              tmpAnn = [[NSMutableArray alloc]initWithArray:group.annotations];
  
          }
          annCount = tmpAnn.count;
          //We want to start at the last item in the array. indexPath.row*4. First row would be 0 then 4, then 8 etc.
          for (int i = indexPath.row*4;i &lt; tmpAnn.count;i++)
          {
              Annotation * theAnnotation = [tmpAnn objectAtIndex:i];
              CGRect bRect = CGRectMake(i*80, 5, 80, 80);
              HomeScreenButton *button = [self getResultsViewButton:bRect imagePath:theAnnotation.image cellForRowAtIndexPath:indexPath i:i entity:theAnnotation];
              [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
              [cell.contentView addSubview:button];
              [button release];
              button = nil;
              //Get and configure the label
              CGRect lRect = CGRectMake(i*80, 80, 100, 16);
              UILabel *label = [self getResultsViewLabel:lRect text:theAnnotation.name cellForRowAtIndexPath:indexPath i:i];
              [cell.contentView addSubview:label];
              [label release];
              label = nil;
          }
      }
      else
      {
          Species * s;
      }
  
      return cell;}
  </code></pre>
  
  <hr>
  
  <pre><code>-(HomeScreenButton *) getResultsViewButton:(CGRect)rect imagePath:(NSString *)image 
  
      cellForRowAtIndexPath:(NSIndexPath *)indexPath i:(int)i entity:(LepidEntity *)entity
      {
          HomeScreenButton *button=[[HomeScreenButton alloc] initWithFrame:rect];
  
          image = [image stringByReplacingOccurrencesOfString:@"Images/" withString:@"Thumbs/"];
  
          UIImage *buttonImageNormal=[UIImage imageWithContentsOfFile:GetFullPath(image)];//imageNamed:image];
          [button setBackgroundImage:buttonImageNormal forState:UIControlStateNormal];
          [button setContentMode:UIViewContentModeCenter];
          NSString *tagValue = [NSString stringWithFormat:@"%d%d", indexPath.section+1, i];
          button.tag = [tagValue intValue];
          button.entity = entity;
          return button;
      }
  </code></pre>