选中并取消选中相同的UITableViewCell

时间:2014-08-18 13:02:34

标签: ios objective-c uitableview

我需要在tableView中取消选中单元格。像一个复选框,一旦我按下一个单元格它保持选中,如果我再次按下相同的单元格它保持未选中。有可能吗?

我发现的是取消选择细胞的一些方法

[table deselectRowAtIndexPath:NSIndexPath animated:YES];

但它无用

UPD: 我不需要检查多个单元格,如果点击选定的单元格,我需要取消选中单元格,如果我点击其他(未选中的)单元格,则选择应该将状态更改为未选中(它已经工作了)默认情况下在单元格中)

3 个答案:

答案 0 :(得分:0)

加载数据源的位置 这样做

arrSelected = [[NSMutableArray alloc] init];
for (int i = 0; i <arrSong.count; i++) {
    [arrSelected addObject:[NSNumber numberWithBool:NO]];
}

在indexpath的单元格中执行此操作

if ([[arrSelected objectAtIndex:indexPath.row] boolValue] == YES) {
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
}
else{
    [cell setAccessoryType:UITableViewCellAccessoryNone];
}

选择/取消选择在tableview中执行此操作:didselect

    if ([[arrSelected objectAtIndex:indexPath.row] boolValue] == YES) {
        [arrSelected replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:NO]];
    }
    else{
        [arrSelected replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:YES]];
    }

答案 1 :(得分:0)

最简单的方法,但它并不是最好的方式: 在didSelectRow中,在setingTheAccesoryType之前,你只需要调用:

[tableView reloadData];

这将取消选择所有行的所有行,然后检查currentCell,

在cellForRow中

,将单元格的accesoryType设置为none。

答案 2 :(得分:0)

ios swift

1。默认情况下,所有单元都处于非活动状态,因此将单元格存储在字典

var indexPathCheckmark = [Int: Bool]()

// set all the values initally false for check mark
                    for var index = 0 ; index < self.listOfOldApps.count ; index++ {
                        self.indexPathCheckmark[index] = false
                    }
    使用以下

    在didSelectRowAtIndexPath中
  1. // set a check marker for all cell required
        let cell = tableView.cellForRowAtIndexPath(indexPath)
        if (indexPathCheckmark[indexPath.row] == false) {
            indexPathCheckmark[indexPath.row] = true
            cell?.accessoryView = UIImageView(image: UIImage(named: "done-active"))
        } else {
            indexPathCheckmark[indexPath.row] = false
            cell?.accessoryView = UIImageView(image: UIImage(named: "done"))
        }