tableview编辑模式单元格选择复选标记在滚动上消失

时间:2014-12-17 18:24:36

标签: ios uitableview

我有UITableView启用了编辑模式,以便我可以选择多个单元格进行删除。当我选择一个单元格时,蓝色复选标记出现在单元格的左侧。但是,当我将所选单元格滚动到视图外,然后向后滚动到所选单元格,我看到复选标记消失。我可以看到单元格仍处于选中状态,因为selectedBackgroundView颜色与未选择的单元格颜色不同,但复选标记仍然消失。

我通过[tableView setEditing:YES animated:YES];

进入编辑模式

我保留了一系列选定的单元格NSArray *selectedRows = [self.audioTable indexPathsForSelectedRows];

所选单元格:

Cell selected

将所选单元格滚出视图然后返回所选单元格后,复选标记消失,但单元格仍处于选定状态:

When scrolled out of view then back into view the checkmark disappears

我知道我需要在cellForRowAtIndexPath中实施以下内容,但我不知道如何取回复选标记

NSArray *selectedRows = [self.audioTable indexPathsForSelectedRows];
for (NSIndexPath *selectionIndex in selectedRows)
{
    if(selectionIndex.row == indexPath.row)
    {
        cell.selected = YES;
    }
}

我确实尝试设置cell.accessoryType = UITableViewCellAccessoryCheckmark,但单元格仍然未被选中。根据文档,左侧的复选标记与编辑控件有关,右侧的复选标记与accessoryView有关,所以我不确定这个问题是否是其他人的欺骗...

2 个答案:

答案 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中,您应该根据是否选择了单元格来明确设置复选标记,以便在单元格重新用于新项目时,它正确隐藏或显示复选标记。