单击单元格时的UITableViewCellAccessoryCheckmark

时间:2013-04-07 14:59:40

标签: iphone ios uitableview

我有一个UITableView,每个单元格都有一个UITableViewCellAccessoryCheckmark。用户可以根据他的偏好检查和取消选中单元格。用户可以在tableview中检查/选择多个单元格。可以取消选中已选中/已选中的单元格,并再次根据用户首选项重新检查。这就是我的尝试。

- (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属于NSIndexPath类型,每次都会在didSelectRowAtIndexpath更新。

1 个答案:

答案 0 :(得分:2)

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

呃,为什么? O_O

通常情况下UITableViewCell被重复使用,索引1处出现的单元格可能会再次出现在索引8或7或9处的相同状态或任何索引(我们不需要dequeueReusableCell:

时,em>通常知道

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

如果您想要RadioButton样式(一次选择一个),则需要使用单个变量引用所选索引。

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

if([[NSIndexPath indexPathWithIndex:indexPath.row] isEqual:self.selectedIndex]){
      cell.accessoryType = UITableViewCellAccessoryCheckmark;
else{
      cell.accessoryType = UITableViewCellAccessoryNone;}
}