1

我正在尝试在UITableViewCell用户选择它时添加一个复选标记。我有以下代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{    
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if (selectedCell.accessoryType == UITableViewCellAccessoryNone) {
        selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

该表有多个部分,问题是如果我选择一行,复选标记会在不同部分的其他行中重复。当您向上和向下滚动页面时,复选标记也会在每个部分的行之间移动。我已经设法遍历表格并记录有多少行有辅助复选标记,并且每次它应该是数字时,它不计算在我无意中添加的其他行。

任何帮助将不胜感激。

4

1 回答 1

1

UITableView当您向上和向下滚动视图时, 您设置为选定的单元格正在被重用。

正确的方法是跟踪模型对象中的选择或签入tableView:cellForRowAtIndexPath:以查看是否indexPath在表格视图中indexPathsForSelectedRows,并且仅在这种情况下显示复选标记。因为cellForRowAtIndexPath:对重用和新创建的单元格都调用了,所以在任何一种情况下都不应该遇到这个问题。

这假设您已设置tableView.allowsMultipleSelectionYES.


- (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;
    }
}
于 2013-05-01T16:48:13.440 回答