我的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
是否正常工作(如允许多行选择)有人可以帮我解决这个问题
答案 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];
}
希望有所帮助