在选定的表格单元格中添加复选标记时,我也会在其他单元格中看到检查。
我的didSelectRowAtIndexPathCode是:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
PFObject *player = [squadListArray objectAtIndex:indexPath.row];
NSString *playerName = [player valueForKey:@"fullName"];
NSLog(@"%@", playerName);
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
NSLog期望结果,只显示一个选择。
有什么想法吗?你需要我展示任何其他代码吗?
由于
答案 0 :(得分:2)
在您的cellForRowAtIndexPath
中,当细胞被重复使用时,您无法正确配置细胞。您应始终从数据模型中设置(并重置)单元格的所有属性。
您必须拥有一个数据模型,用于告诉表视图它有多少行以及每个单元应该是什么样的。在didSelectRowAtIndexPath
期间,您应该使用selected
信息更新数据模型。然后,在cellForRowAtIndexPath
中,您可以使用数据模型中的信息来确定单元格是否具有复选标记。如果它是你添加它,如果它没有你明确删除它(以防止它被留在那里,如果该单元格被重用)。
答案 1 :(得分:1)
您的手机正被其他行回收。在方法cellforrowatindexpath
中,在末尾添加以下行:
selectedCell.accessoryType = UITableViewCellAccessoryNone;
答案 2 :(得分:0)
缓存并重新使用单元格。您只需要保存您选择的事实(可能在PFObject中),然后在每次配置单元格时设置附件。
答案 3 :(得分:0)
您需要明确告知您不希望其他单元格具有复选标记。
if ([self shouldSelectCell]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
答案 4 :(得分:0)
您可以尝试执行以下操作:
创建保存所选单元格索引的NSMutableSet。
@property(strong, nonatomic) NSMutableSet *selectedCells;
-(NSMutableSet *)selectedCells{
if(_selectedCells){
return _selectedCells;
}
_selectedCells = [[NSMutableSet alloc]init];
return _selectedCells;
}
在didSelect上更新集合并选择单元格:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[self.selectedCells addObject:indexPath];
[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
}
删除didDEselect上的indexPath
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryNone;
[self.selectedCells removeObject:indexPath];
}
在
内- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
将单元格更新为:
if([self.selectedCells containsObject:indexPath]){
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}else{
cell.accessoryType = UITableViewCellAccessoryNone;
}