如何取消选中tableView中的已检查行

时间:2015-12-03 09:46:05

标签: ios objective-c uitableview

我的代码完全符合我的要求,但现在我无法取消选中已检查的单元格。 检查代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int z=0;
    if (indexPath.row==0)
    {
        NSArray *visibleCells = [tableView visibleCells];
        for (UITableViewCell *cell in visibleCells)
        {
            if (z==0)
            {
                [cell setAccessoryType:UITableViewCellAccessoryCheckmark];      
                 z++;
            }
            else
            {
                [cell setAccessoryType:UITableViewCellAccessoryNone];    
                z++;
            }
        }
    }
    else
    {
        UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        self.checkedIndexPath = indexPath;
        [tableView reloadData];
    }
}

在此我已经完成了编码以检查多行,但如果用户选择了第一行,则取消选中所有其他行。 这对我来说很完美。

但是我现在想要检查前面检查过的行。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

检查我的代码 您可以轻松地在MutuableArray中添加多个值,如果您取消选中,那么它将通过索引路径删除

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

       if (indexPath.section == 0){


          if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {       
               [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
               [self.click insertObject:[service_shop objectAtIndex:indexPath.row]atIndex:0];

               NSLog(@"-%@--%@--",click);

                [index2 addObject:indexPath];  
          }else{

               [selectedCell setAccessoryType:UITableViewCellAccessoryNone];
               [click removeObject:[service_shop objectAtIndex:indexPath.row] ];

                NSLog(@"--%@--%@---",click);
                [index2 removeObject:indexPath];
            }
            [_tableView reloadData];
        }
 }

希望这项工作

由于

答案 1 :(得分:1)

如果我理解正确,您想恢复以前的选择。要做到这一点,你显然必须将选择存储在某个地方。所以为它创建一个类变量:

@implementation YourViewController
{
    NSArray *selectedIBackup;
}

现在,当选择第一行时,备份当前选择:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row==0) {
        selectedIBackup = _table.indexPathsForSelectedRows;

        for (int i=1; i<self.rowsCount; i++) {
            [_table deselectRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone];
        }
    }
}

现在恢复选择:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
   if (indexPath.row==0) {
        for (NSIndexPath *indexP in selectedIBackup) {
            [_table selectRowAtIndexPath:indexP animated:NO];
        }
   }
}