重置UItableViewCell复选标记

时间:2011-08-24 08:16:57

标签: iphone objective-c uitableview

以下代码以空白单元格开头,并在选定单元格时添加复选标记,但是一旦添加,如果再次按下该单元格,则不会删除该单元格。我每次调用didSelectRowAtIndexPath时都试图重置它。如何清除细胞以便只标记一个?感谢。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.accessoryType = UITableViewCellAccessoryNone;

    if (indexPath.section == 0) {

    switch (indexPath.row) {
        case 0:
            labelInfo.text=@"1";
            cell.accessoryType = UITableViewCellAccessoryCheckmark; 
            break;
        case 1:
            labelInfo.text=@"2";
            cell.accessoryType = UITableViewCellAccessoryCheckmark; 
            break;
        case 2:
            labelInfo.text=@"3";
            cell.accessoryType = UITableViewCellAccessoryCheckmark; 
            break;
        case 3:
            labelInfo.text=@"4";
            cell.accessoryType = UITableViewCellAccessoryCheckmark; 
            break;
        case 4:
            labelInfo.text=@"5";
            cell.accessoryType = UITableViewCellAccessoryCheckmark; 
            break;
        default:
            break;
        }
    }
}        

5 个答案:

答案 0 :(得分:4)

此代码将删除表格上的所有复选标记

[[self.tableView visibleCells] makeObjectsPerformSelector:@selector(setAccessoryType:) withObject:UITableViewCellAccessoryNone];

答案 1 :(得分:3)

只需复制粘贴即可。有用。

  //in your .h file
   int selectedCell;

   //in your .m file
   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
   {

       NSString* cellIdentifier = @"cellIdentifier";
       UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

       if(cell == nil)
       {
           cell = (UITableViewCell*) [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];

       }
       cell.accessoryType = UITableViewCellAccessoryNone;

       if (indexPath.section == 0) {

           if(indexPath.row == selectedCell)
           {
                   cell.accessoryType = UITableViewCellAccessoryCheckmark; 
                   cell.selected = YES;
           }
           else
           {
               cell.accessoryType = UITableViewCellAccessoryNone;
               cell.selected = NO;
           }
       }
   }



   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
   {
       selectedCell = indexPath.row;
       [tableView reloadData];
       //remaining code.
   }

答案 2 :(得分:1)

试试这个:

if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    cell.accessoryType = UITableViewCellAccessoryNone;
} else {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

答案 3 :(得分:0)

在您的代码中,您可以从

开始
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryNone;

从所选单元格中删除复选标记,但稍后再次使用

指定复选标记
switch (indexPath.row) {
    case 0:
        labelInfo.text=@"1";
        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break;
    case 1:
        labelInfo.text=@"2";
        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break;
    case 2:
        labelInfo.text=@"3";
        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break;
    case 3:
        labelInfo.text=@"4";
        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break;
    case 4:
        labelInfo.text=@"5";
        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break;
    default:
        break;
    }

所以,你可以使用像

这样的东西
 if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    cell.accessoryType = UITableViewCellAccessoryNone;
} else {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

用于切换复选标记和

labelInfo.text = [NSString stringWithFormat:@"%d", indexPath.row + 1];

标签

答案 4 :(得分:0)

这样做: -

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {

        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];


        if (indexPath.section == 0) {

            switch (indexPath.row) {
                case 0:
                    labelInfo.text=@"1";
                    if (cell.accessoryType==UITableViewCellAccessoryCheckmark) 
                        cell.accessoryType=UITableViewCellAccessoryNone;
                    else 
                        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
                    break;
                case 1:
                    labelInfo.text=@"2";
if (cell.accessoryType==UITableViewCellAccessoryCheckmark) 
                        cell.accessoryType=UITableViewCellAccessoryNone;
                    else 
                        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
                    break;
                case 2:
                    labelInfo.text=@"3";
if (cell.accessoryType==UITableViewCellAccessoryCheckmark) 
                        cell.accessoryType=UITableViewCellAccessoryNone;
                    else 
                        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
                    break;
                case 3:
                    labelInfo.text=@"4";
                    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
                    break;
                case 4:
                    labelInfo.text=@"5";
if (cell.accessoryType==UITableViewCellAccessoryCheckmark) 
                        cell.accessoryType=UITableViewCellAccessoryNone;
                    else 
                        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
                    break;
                default:
                    break;
            }
        }