2011-08-24 64 views
1

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

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

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

    if (indexPath.section == 0) { 

    switch (indexPath.row) { 
     case 0: 
      [email protected]"1"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     case 1: 
      [email protected]"2"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     case 2: 
      [email protected]"3"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     case 3: 
      [email protected]"4"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     case 4: 
      [email protected]"5"; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     default: 
      break; 
     } 
    } 
}   

回答

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. 
    } 
+0

嗨全部标记,代码工作几近完美节选的是默认选定的单元格不显示文本,直到另一个单元格被按下!如何解决? – Ruth85

+0

我的意思是,例如,当voidDidLoad,selectedCell = 2和该单元格将不会有文本,直到任何其他单元格被按下。 – Ruth85

+0

的selectedCell的值为-1。 – mayuur

1

试试这个:

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

在你的代码开始

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

从选定单元格删除检查标记,但后来你

switch (indexPath.row) { 
    case 0: 
     [email protected]"1"; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     break; 
    case 1: 
     [email protected]"2"; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     break; 
    case 2: 
     [email protected]"3"; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     break; 
    case 3: 
     [email protected]"4"; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     break; 
    case 4: 
     [email protected]"5"; 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     break; 
    default: 
     break; 
    } 
再次分配勾选

所以,你c一个使用类似

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

来回切换的选中标记,

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

的标签

0

做到这一点: -

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

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 


     if (indexPath.section == 0) { 

      switch (indexPath.row) { 
       case 0: 
        [email protected]"1"; 
        if (cell.accessoryType==UITableViewCellAccessoryCheckmark) 
         cell.accessoryType=UITableViewCellAccessoryNone; 
        else 
         cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break; 
       case 1: 
        [email protected]"2"; 
if (cell.accessoryType==UITableViewCellAccessoryCheckmark) 
         cell.accessoryType=UITableViewCellAccessoryNone; 
        else 
         cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break; 
       case 2: 
        [email protected]"3"; 
if (cell.accessoryType==UITableViewCellAccessoryCheckmark) 
         cell.accessoryType=UITableViewCellAccessoryNone; 
        else 
         cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break; 
       case 3: 
        [email protected]"4"; 
        cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break; 
       case 4: 
        [email protected]"5"; 
if (cell.accessoryType==UITableViewCellAccessoryCheckmark) 
         cell.accessoryType=UITableViewCellAccessoryNone; 
        else 
         cell.accessoryType = UITableViewCellAccessoryCheckmark; 
        break; 
       default: 
        break; 
      } 
     } 
4

该代码将删除表

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

我发现UITableViewCellAccessoryNone需要包装以使其工作:[[self.tableView visibleCells] makeObjectsPerformSelector:@selector(setAccessoryType :) withObject:@(UITableViewCellAccessoryNone)]; – fatuhoku