我在自定义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];
}
非常感谢你提出任何建议!!
斯特凡诺
答案 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个部分,现在这个工作正常。如果你有多个部分,那么需要更多的调整以获得表格部分。