tableView刷新时丢失自定义数据

时间:2014-04-25 11:44:41

标签: ios uitableview custom-cell pull-to-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;

}

此代码用于在单击时更改单元格.button的图像

- (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);    
}

表刷新时,所有更改的图像都设置为默认值

2 个答案:

答案 0 :(得分:0)

查看代码的最后几行

-(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];
    }

}  

答案 1 :(得分:0)

在班级的顶层

@implementation YourViewController : UIViewController
{
  NSMutableDictionary *selectedRows;
}

然后将此方法更改为此

- (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);

// Add this lline of code

    [selectedRows setBool:YES forKey:title];
}

最后在你的cellForRowAtIndexPath

-(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:[selectedRows boolForKey:titles[indexPath.row]] == YES ? [UIImage imageNamed:@"add_btn.png"] : [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;
}