0

我对自定义 UITableViewCell 中的复选框有疑问。当我触摸复选框时,图像更改(“checked.png”-->“unchecked.png”和“unhacked.png”-->“checked.png”)并且值保存在数据库(SQLLite)中。问题是,如果我进入一个有“检查”复选框的视图并触摸它,图像不会改变,但如果我重新加载视图,图像是正确的!如何在事件“按下复选框”时自动重新加载视图?这是我的代码:

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

非常感谢您的任何建议!

斯特凡诺

4

2 回答 2

0

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

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

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

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

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

现在,如果您只有 1 个部分,这将正常工作。如果您有多个部分,则需要进行更多调整才能获得表格部分。

于 2012-06-02T13:28:46.500 回答
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];

}

于 2012-06-01T11:03:42.713 回答