我有一个UITablViewController并实现以下内容:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.tableView cellForRowAtIndexPath:self.oldIndexPath].accessoryType = UITableViewCellAccessoryNone;
NSLog(@"%@", indexPath);
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
self.oldIndexPath = indexPath;
}
我注意到,复选标记出现在2个单元格上,一个带有索引路径,例如,如果我选择索引路径为{length = 2, path = 0 - 2}
的单元格并向下滚动,我会注意到复选标记在{{1 }}
表格视图中只有1个部分,大约18-19行。
有人可以为我验证这个/或者是时候睡觉了吗?/?
P.S:在模拟器和设备上测试了这个
细胞创建如下:
{length = 2, path = 0 - 14}
答案 0 :(得分:2)
由于您的单元格是可重用的(我想),您需要在
中设置它- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.tableView cellForRowAtIndexPath:self.oldIndexPath].accessoryType = UITableViewCellAccessoryNone;
NSLog(@"%@", indexPath);
self.oldIndexPath = indexPath;
for (UITableViewCell *cell in tableView.visibleCells) {
if ([tableView indexPathForCell:cell].section == indexPath.section && [tableView indexPathForCell:cell].row == indexPath.row) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}
}
和
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
cell.textLabel.text = self.stationsDictionary[@"urls"][indexPath.row][@"title"]; return cell;
cell.accessoryType = self.oldIndexPath.section == indexPath.section && self.oldIndexPath.row == indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
}
或者重用的单元格将保持可以检查的前一个单元格(重用的单元格)的状态。
常见错误;)
答案 1 :(得分:1)
当您从cellForRowAtIndexPath
出列单元格时,请务必重置其状态 - 在您的情况下,为accessoryType
属性。
由于单元格被重用,所以会发生当索引为2的单元格不可见时,会重复使用它来显示索引为14的行。
因此,如果要保留其状态,则需要保存每个单元格状态(如果只需要保存didSelectRowAtIndexPath
属性,则需要在accessoryType
中保存),并恢复进入cellForRowAtIndexPath
的单元格。
您可以使用NSArray
,使用单元格索引作为数组索引来保存单元格状态,甚至是UITableViewCellAccessoryType
或布尔值的“普通”数组