目标c复选框不刷新

时间:2012-06-01 09:22:35

标签: objective-c xcode4 uitableview checkbox

我在自定义UITableViewCell中遇到了复选框问题。 当我触摸复选框时图像更改(“checked.png” - >“unchecked.png”和“unchacked.png” - >“checked.png”)并将值保存在DB(SQLLite)上。 问题是,如果我进入一个视图,其中有一个复选框“cheked”,我触摸它,图像不会改变,但如果我重新加载视图,图像是正确的! 如何在事件“按下复选框”上自动重新加载视图? 这是我的代码:

// called when the checkmark button is touched 
- (void)checkAction:(id)sender
{
    // note: we don't use 'sender' because this action method can be called separate from the button (i.e. from table selection)
    self.checked = !self.checked;
    UIImage *checkImage = (self.checked) ? [UIImage imageNamed:@"checked.png"] : [UIImage imageNamed:@"unchecked.png"];
    [checkButton setImage:checkImage forState:UIControlStateNormal];
}

非常感谢你提出任何建议!!

斯特凡诺

2 个答案:

答案 0 :(得分:0)

试试这个:

- (void)checkAction:(id)sender
{
  if(![sender isSelected])
  {
    [sender setSelected:YES];
    [checkButton setImage:[checkButton setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
    //Save state in Database

  }
  else
  {
    [sender setSelected:NO];
    [checkButton setImage:[checkButton setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
   //Save state in Database
  }

  [YourTableView reloadData];

}

答案 1 :(得分:0)

每当在已渲染的UITableViewCell中进行更改时,您需要重新加载该单元格,以便重新绘制并反映更改。

因此,在拦截checkAction之后,您需要重新加载整个表(不必要)或只是重载表格行的表行。

我猜你的下一个问题是,我怎么知道复选框在哪一行? 好吧,这是一个简单但易于实现的技巧。 在每个复选框中添加一个Tag值(这是一个整数值),它具有行的值。

然后通过以下方式获取单元格引用:

- (void)checkAction:(id)sender
{
   int tag= sender.tag;
    NSIndexPath *cellIndexPath = [NSIndexPath indexPathForRow:tag inSection:0];
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:cellIndexPath] withRowAnimation:UITableViewRowAnimationFade];
}

如果你只有1个部分,现在这个工作正常。如果你有多个部分,那么需要更多的调整以获得表格部分。