Search code examples
iosuitableviewcustom-cellpull-to-refresh

lost custom data when tableView refresh


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  ItemsCustomCell *cell; 
  static NSString *CellIdentifier = @"Cell"; 
  cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
  if (cell == nil)   {
     cell = [[ItemsCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

  NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ItemsCustomCell" owner:self options:nil];
  cell = [nib objectAtIndex:0];
  cell.itemName.text=titles[indexPath.row];

  [ cell.addButton setBackgroundImage:[UIImage imageNamed:@"add_btn.png"] forState:UIControlStateNormal];    
  [cell.addButton addTarget:self action:@selector(Checktag:event:)forControlEvents:UIControlEventTouchUpInside];
  cell.cellBackgroudImage.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"list_bg.png"] ];


  NSArray *anArrayOfIndexPath = [NSArray arrayWithArray:[self.itemsTableView indexPathsForVisibleRows]];

  NSIndexPath *indexPathVisibleRowsLast= [anArrayOfIndexPath lastObject];

  [ cell.addButton setBackgroundImage:[UIImage imageNamed:@"add_btn.png"] forState:UIControlStateNormal];
  int firstVisible=(indexPathVisibleRowsLast.row)-8;   
  CGPoint offset = itemsTableView.contentOffset;
  CGRect bounds = itemsTableView.bounds;
  CGSize size = itemsTableView.contentSize;
  UIEdgeInsets inset = itemsTableView.contentInset;
  float y = offset.y + bounds.size.height - inset.bottom;
  float h = size.height;
  float reload_distance = 10;       

  }        
}  
return cell;

}

This code is used to change image of cell .button when it is clicked

- (void)Checktag:(id)sender event:(id)event 
{   
        UIButton *btnClicked=(UIButton *)sender;
        NSLog(@"%i",btnClicked.tag);
        [ btnClicked setBackgroundImage:[UIImage imageNamed:@"tick_btn.png"]
                                   forState:UIControlStateNormal];
        NSSet *touches = [event allTouches];
        UITouch *touch = [touches anyObject];
        CGPoint currentTouchPosition = [touch locationInView:itemsTableView];
        NSIndexPath *indexPath = [itemsTableView indexPathForRowAtPoint: currentTouchPosition];

        NSString *title=titles[indexPath.row];
        NSString *id1=idAll[indexPath.row];
        [mySelectedItems addObject:title];
        [idSelectedItems addObject:id1];
        NSLog(@"value of indePath.section %d ,indexPath.row %d",indexPath.section,indexPath.row);    
}

when table refresh all the change imaged is set to default


Solution

  • Look the last lines of the code

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        ItemsCustomCell *cell;
        static NSString *CellIdentifier = @"Cell";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)   {
            cell = [[ItemsCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ItemsCustomCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
    
    
            [ cell.addButton setBackgroundImage:[UIImage imageNamed:@"add_btn.png"] forState:UIControlStateNormal];
            [cell.addButton addTarget:self action:@selector(Checktag:event:)forControlEvents:UIControlEventTouchUpInside];
            cell.cellBackgroudImage.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"list_bg.png"] ];
    
    
            NSArray *anArrayOfIndexPath = [NSArray arrayWithArray:[self.itemsTableView indexPathsForVisibleRows]];
    
            NSIndexPath *indexPathVisibleRowsLast= [anArrayOfIndexPath lastObject];
    
            [ cell.addButton setBackgroundImage:[UIImage imageNamed:@"add_btn.png"] forState:UIControlStateNormal];
            int firstVisible=(indexPathVisibleRowsLast.row)-8;
            CGPoint offset = itemsTableView.contentOffset;
            CGRect bounds = itemsTableView.bounds;
            CGSize size = itemsTableView.contentSize;
            UIEdgeInsets inset = itemsTableView.contentInset;
            float y = offset.y + bounds.size.height - inset.bottom;
            float h = size.height;
            float reload_distance = 10;       
    
        }
        cell.itemName.text=titles[indexPath.row];
    
        if ([idSelectedItems containsObject:indexPath])
        {
            [ cell.addButton setBackgroundImage:[UIImage imageNamed:@"tick_btn.png"]
                                   forState:UIControlStateNormal];
        }
    
    }