我有UITableView
启用了编辑模式,以便我可以选择多个单元格进行删除。当我选择一个单元格时,蓝色复选标记出现在单元格的左侧。但是,当我将所选单元格滚动到视图外,然后向后滚动到所选单元格,我看到复选标记消失。我可以看到单元格仍处于选中状态,因为selectedBackgroundView颜色与未选择的单元格颜色不同,但复选标记仍然消失。
我通过[tableView setEditing:YES animated:YES];
我保留了一系列选定的单元格NSArray *selectedRows = [self.audioTable indexPathsForSelectedRows];
所选单元格:
将所选单元格滚出视图然后返回所选单元格后,复选标记消失,但单元格仍处于选定状态:
我知道我需要在cellForRowAtIndexPath
中实施以下内容,但我不知道如何取回复选标记
NSArray *selectedRows = [self.audioTable indexPathsForSelectedRows];
for (NSIndexPath *selectionIndex in selectedRows)
{
if(selectionIndex.row == indexPath.row)
{
cell.selected = YES;
}
}
我确实尝试设置cell.accessoryType = UITableViewCellAccessoryCheckmark
,但单元格仍然未被选中。根据文档,左侧的复选标记与编辑控件有关,右侧的复选标记与accessoryView
有关,所以我不确定这个问题是否是其他人的欺骗...
答案 0 :(得分:0)
我发现了问题,导致了另一个问题。在遇到这个问题之前,每次我选择一个单元格时,我的分隔线总是消失,而且没有一个SO解决方案适合我。当我的selectionStyle不是UITableViewCellSelectionStyleNone
时,我注意到分隔线正在消失。为了防止分隔线消失但同时保留蓝色复选标记,我将selectionStyle设置为UITableViewCellSelectionStyleNone
中的cellForRowAtIndexPath
。但是,当我的tableview进入编辑模式时,我会将selectionStyle切换为'UITableViewCellSelectionStyleBlue',并在退出编辑模式时将其切换回'UITableViewCellSelectionStyleNone'。这完美地工作......直到现在。
因此,每当我进入编辑模式时,我在tableViewCell类中调用了一个自定义方法,该方法执行以下操作:
-(void) changeSelectionStyle: (BOOL) inDefaultMode
{
if(inDefaultMode)
{
self.selectionStyle = UITableViewCellSelectionStyleBlue;
}
else
{
self.selectionStyle = UITableViewCellSelectionStyleNone;
}
}
截至目前,每当我将单元格滚出视图,然后滚动回所选单元格,cellForRowAtIndexPath
将选择样式设置为UITableViewCellSelectionStyleNone
答案 1 :(得分:0)
检查标记消失的原因是iOS回收了单元格。我敢打赌,如果您选择了一些单元格并开始滚动足够的话,您可能会看到未选择的单元格开始显示复选标记。基本上,您的单元格从屏幕上消失,然后滚动回到它。 iOS抓取了一个回收的单元格,它碰巧在上次使用时隐藏了复选标记。
因此,在cellForRowAtIndexPath
中,您应该根据是否选择了单元格来明确设置复选标记,以便在单元格重新用于新项目时,它正确隐藏或显示复选标记。