当我在UITableview上滚动时,多个选定行的复选标记将消失。如何解决此问题?

问题描述:

我想实现UITableview.but多行选择时,我选择用对号多行和向下滚动,复选标记是当我回来section.I从#1尝试了许多解决方案选择的行消失,但它不工作对于我来说,可以请任何人给我一个适合我的解决方案。当我在UITableview上滚动时,多个选定行的复选标记将消失。如何解决此问题?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 

     static NSString *simpleTableIdentifier = @"SimpleTableCell"; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

     if (cell == nil) 
     { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
     } 
      if([_selectedstatearray containsObject:indexPath]) { 
       cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      } 
      else { 
       cell.accessoryType = UITableViewCellAccessoryNone; 

      } 


     cell.textLabel.text = [statearray objectAtIndex:indexPath.row]; 
     return cell; 

    } 


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

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
     NSString *cellText = cell.textLabel.text; 
     NSLog(@"cellText>>%@",cellText); 

     if (cell.accessoryType == UITableViewCellAccessoryCheckmark) { 
      [_selectedstatearray removeObject:cellText]; 
      cell.accessoryType = UITableViewCellAccessoryNone; 

     } else { 
      [_selectedstatearray addObject:cellText]; 
      cell.accessoryType=UITableViewCellAccessoryCheckmark; 
     } 

     NSLog(@"selectedarray>>%@",_selectedstatearray); 

     NSString *greeting = [_selectedstatearray componentsJoinedByString:@","]; 
     NSLog(@"%@",greeting); 


     [tableView deselectRowAtIndexPath:indexPath animated:YES]; 


    } 
+0

你分配你的'_selectedstatearray'内存 –

+0

看到这个http://*.com/questions/17419214/set-checkmark-in-uitableview –

问题就出在这一段代码:

if([_selectedstatearray containsObject:indexPath]) { 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
else { 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 

您检查是否_selectedstatearray包含指定indexPath,同时您将它们保存为NSString的[_selectedstatearray addObject:cellText];

替换上面这个代码:

NSString *text = [statearray objectAtIndex:indexPath.row]; 
if([_selectedstatearray containsObject:text]) { 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
else { 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 
+0

感谢alot.its working.and如何在其他屏幕上获取这些选定的行? –

+0

@swapnilpatel你必须维护数组。无论何时用户选择任何行,您都会获得该行的indexPath,以便将'indexPath.row'存储在数组中,并将该数组传递到您想要选定行的VC。 –

+0

如果您希望此tableView在选中某行时通知其他视图控制器,则可以创建自定义协议并将委派设置为该视图控制器,也可以使用块。如果您只想从另一个视图控制器访问选定的行,则可以简单地将_selectedstatearray声明为'.h'文件中的一个属性。 –

对答案你最后的评论

如果您传递selectedstatearray到另一个ViewController's(viewControllerB)UITableView这将只包含selectedstatearray那么你可以只添加

cell.accessoryType = UITableViewCellAccessoryCheckmark

在你的UITableVIew代表方法

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

这将复选标记添加到所有行的

希望它可以帮助....