UITableView调用UITableCell导致不需要的输出

时间:2010-09-10 02:30:58

标签: iphone objective-c

点击时,我正试图切换UITableCell的颜色 代码如下

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    RowCell *cell = (RowCell*) [tableView cellForRowAtIndexPath:indexPath];
    [cell toggle];
}

切换实际上是有效的,除了它看起来像是暮光之城超过1个单元格 即如果10行覆盖当前可见区域,则单击第一行将显示第1行,第11行,第21行等,而不是我单击的第1行。

如何防止这种情况发生?

谢谢,
三通

3 个答案:

答案 0 :(得分:1)

确保您在tableView:cellForRowAtIndexPath:中正确配置了单元格。请记住,使用dequeueReusableCellWithIdentifier:您正在重复使用表格视图单元格。第11行的单元格可能与先前在第1行显示的单元格相同。

tableView:cellForRowAtIndexPath:返回之前设置每个单元格的高亮状态。请注意,这可能需要您将每行的突出显示状态存储在单元格本身以外的其他位置。

答案 1 :(得分:0)

由于单元格被重用,请实现tableView:willDisplayCell:forRowAtIndexPath:并将切换设置为所需的值。当然,您必须在模型中存储每个单元格的切换按钮的状态。

答案 2 :(得分:0)

请记住,细胞会被重复使用。因此,当这个单元格在dequeueReusableCellWithIdentifier:中交还给您时,它仍将被切换(并且您可能不会将其更改回来)。您应该在用于向单元格提供数据的基础数据对象上调用方法,而不是在单元格上调用方法。然后在tableView:willDisplayCell:forRowAtIndexPath:中,您应该像“切换”可能做的那样进行最终显示清理。