Cell Row多重选择

时间:2011-12-29 17:28:00

标签: iphone objective-c

我的tableView中有超过50行。如果我必须查看第50个单元格,我将不得不向下滚动。我还为我的表启用了多个选择。问题是当我选择5行时,然后向下滚动我还会选择其他一些行(我没有选择的行,并且当我在下面进一步滚动时自动选择了这些行。)

1。)我如何克服这个问题?

我的cellForRowAtIndexPath方法

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];   

    cell.textLabel.text=@"Text values";
}

我的didSelectRowAtIndexPath方法

UITableViewCell *cell = [self.tble cellForRowAtIndexPath:indexPath];

if ([cell accessoryType] == UITableViewCellAccessoryNone) {
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];

} 
else {
    [cell setAccessoryType:UITableViewCellAccessoryNone];

}

2。)我不确定我的didSelectRowAtIndexPath是否正常工作(如允许多行选择)有人可以帮我解决这个问题

2 个答案:

答案 0 :(得分:2)

您通过设置单元配件视图来存储选择。重复使用所选单元格时,不会重置附件视图。您还需要在cellForRowAtIndexPath中设置或取消设置附件视图(如果索引路径是表视图选择(indexPathsForSelectedRows)的一部分,则设置,否则设置为unset)。

您可能还会发现将所选状态存储为数据模型的一部分很有帮助,因此您可以在didSelect中轻松切换...并且还知道要在cellForRow中显示哪个附件视图......

答案 1 :(得分:1)

你的问题是,由于你正在重复使用单元格,如果你不“清理”它们,单元格将显示复选标记...你可以做的是保留一些数组以跟踪检查哪些单元格,初始化为任何单元格它是你想要它们,然后在索引路径的行的单元格中你需要将单元格设置为选中或不...例如

didSelectRowAtIndexPath可能看起来像

if ([cell accessoryType] == UITableViewCellAccessoryNone) {
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
  [_array insertObject:[NSNumber numberWithInt:1] atIndex:indexPath.row];

} 
else {
    [cell setAccessoryType:UITableViewCellAccessoryNone];
 [_array insertObject:[NSNumber numberWithInt:0] atIndex:indexPath.row];
}

然后在cellForRowAtIndexPath你可以做

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

希望有所帮助