在被拖动时编辑UITableViewCells

时间:2009-12-11 21:24:20

标签: iphone objective-c cocoa-touch

我有一个自定义UITableViewCell子视图,其上有一个按钮,背景颜色代表优先级。允许用户在表格中拖动单元格,这会更改该行所表示的对象的优先级。我想在完成后更新按钮的颜色,所以我实现了这个:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    //update data source
    theCell.button.backgroundColor = newColor;
}

只要在我放开移动控件时按钮的背景颜色发生变化,就可以正常工作。但是,一旦单元格动画到位,背景颜色就会变回其先前的颜色。单元格上的其他值会正确更改(例如,如果我更改文本,则会保持更改状态。)

有关错误或解决方法的任何想法?

2 个答案:

答案 0 :(得分:1)

据我所知,在任何动画发生时改变行中的任何内容都是不明智的。 (我试图在谷歌找到这个,但没有找到官方参考)。

我通过做类似的事情解决了这个问题:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    [tableView performSelector:@selector(updateRow) withObject:nil afterDelay:0.1f];
}

- (void)updateRow {
    theCell.button.backgroundColor = newColor;
}

我发现这允许动画完成,并且不会丢弃对单元格的更改。

答案 1 :(得分:0)

在moveRowAtIndexPath退出后是否会调用reloadData?

我的猜测是你依靠tablecell来存储你的数据(即按钮的背景颜色),但是这些信息应该最终存储在你的数据模型中,并且因为细胞被重复使用,所以bg颜色不会坚持你期望的那个。当然,改变文本“粘”的事实似乎与这一理论相矛盾。尽管如此,它确实感觉像这样的东西(需要表数据重新加载并确保您的数据模型与给定indexPath处的表格单元的请求同步的组合)。