0

我有一个 UITableView,每个单元格都有一个 UITableViewCellAccessoryCheckmark。用户可以根据自己的喜好选中和取消选中单元格。用户可以在表格视图中检查/选择多个单元格。可以根据用户偏好取消选中和重新选中选中/选中的单元格。这是我尝试过的。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if([[NSIndexPath indexPathWithIndex:indexPath.row] isEqual:self.selectedIndex]){
                    if(cell.accessoryType == UITableViewCellAccessoryCheckmark)
                        cell.accessoryType = UITableViewCellAccessoryNone;
                    else
                        cell.accessoryType = UITableViewCellAccessoryCheckmark;
                }
                else{
                    if(cell.accessoryType == UITableViewCellAccessoryCheckmark){

                    }
                    else{
                        cell.accessoryType = UITableViewCellAccessoryNone;}
                }
}

在这种情况下,我的逻辑不正确。以上是我最接近的,但同样,第一次加载 tableview 时检查每个单元格。但是其他功能还可以。

所以我想要的是,最初在加载视图时,我必须UITableView取消选中所有单元格。然后根据单元格的选择,必须在每个单元格中更新复选标记。该属性selectedIndex是 typeNSIndexPath并且每次在 中更新didSelectRowAtIndexpath

4

1 回答 1

2

永远不要根据单元格中的任何数据检查您选择的状态,始终拥有自己的数据模型或数组来维护所选状态。

诶,为什么?o_o

好吧 通常UITableViewCell被重复使用,出现在索引 1 的单元格可能会再次出现在索引 8 或 7 或 9 或任何索引处以相同状态出现(我们通常不需要知道)当您使用dequeueReusableCell:

如果你想有CheckBox风格(多选),你需要有一个数组来映射选定的索引。

如果你想有RadioButton风格(一次选择一个),你需要有一个引用所选索引的变量。

在您的代码中的特定情况下..这可以这样解决:

if([[NSIndexPath indexPathWithIndex:indexPath.row] isEqual:self.selectedIndex]){
      cell.accessoryType = UITableViewCellAccessoryCheckmark;
else{
      cell.accessoryType = UITableViewCellAccessoryNone;}
}
于 2013-04-07T15:11:00.193 回答