我正在尝试在用户选择时向UITableViewCell
添加复选标记。我有以下代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if (selectedCell.accessoryType == UITableViewCellAccessoryNone) {
selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
该表有多个部分,问题是如果我选择一行,则复选标记会在不同部分的其他行中重复。当您向上和向下滚动页面时,复选标记也会在每个部分的行之间移动。我已设法循环遍历表并记录有多少行具有附件复选标记,并且每次它应该是它应该是的数字,它不计算在没有我意义的情况下添加的其他行。
非常感谢任何帮助。
答案 0 :(得分:1)
当您在视图中向上和向下滚动时,UITableView
正在重复使用您设置为选定的单元格。
正确的方法是跟踪模型对象中的选择,或签入tableView:cellForRowAtIndexPath:
以查看indexPath
是否在表格视图的indexPathsForSelectedRows
中,并且仅显示该情况下的复选标记。因为为重用和新创建的单元格都调用cellForRowAtIndexPath:
,所以在任一场景中都不应该遇到此问题。
这假设您已将tableView.allowsMultipleSelection
设置为YES
。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = // do some initing here
// determine if this cell is currently selected
if ([tableView.indexPathsForSelectedRows containsObject:indexPath]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
}