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

Posted

技术标签:

【中文标题】tableview 编辑模式单元格选择复选标记在滚动时消失【英文标题】:tableview edit mode cell selection checkmark disappearing on scroll 【发布时间】:2014-12-17 18:24:35 【问题描述】:

我有一个启用了编辑模式的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 有关,所以我不确定这个问题是否是其他人的欺骗......

【问题讨论】:

也是***.com/questions/13395306/…的骗子 您需要将cell.accessoryType设置为UITableViewCellAccessoryCheckmark 我尝试设置cell.accessoryType,但没有成功。另外,单元格右侧的accessoryView 不是accessoryType 吗? 是的,对不起,我的错误 我重新打开了问题,但您需要在问题中提供更多详细信息。显示更多与如何设置单元格以及如何添加复选标记相关的代码。 【参考方案1】:

我发现了问题,这导致了另一个问题。在遇到这个问题之前,每次我选择一个单元格时,我的分隔线总是消失,并且没有一个 SO 解决方案对我有用。我注意到当我的 selectionStyle 不是UITableViewCellSelectionStyleNone 时,分隔线消失了。为了不让分隔线消失但同时保留蓝色复选标记,我在cellForRowAtIndexPath 中将我的 selectionStyle 设置为UITableViewCellSelectionStyleNone。但是,当我的 tableview 进入编辑模式时,我会将我的 selectionStyle 切换为“UITableViewCellSelectionStyleBlue”,并在退出编辑模式时将其切换回“UITableViewCellSelectionStyleNone”。这工作得很好......直到现在。

因此,每当我进入编辑模式时,我都会在我的 tableViewCell 类中调用一个自定义方法,该方法执行以下操作:

-(void) changeSelectionStyle: (BOOL) inDefaultMode

    if(inDefaultMode)
    
        self.selectionStyle = UITableViewCellSelectionStyleBlue;
    
    else
    
        self.selectionStyle = UITableViewCellSelectionStyleNone;
    


所以到目前为止,每当我将单元格滚动出视图然后滚动回选定的单元格时,cellForRowAtIndexPath 将选择样式设置为 UITableViewCellSelectionStyleNone

【讨论】:

【参考方案2】:

复选标记消失的原因是因为 ios 会回收单元格。我敢打赌,如果您选择了一些单元格并开始足够滚动,您可能会看到未选择的单元格开始显示带有复选标记。基本上,您的单元格从屏幕上消失,然后您滚动回它。 iOS 抓取了一个回收的单元格,该单元格恰好在上次使用时隐藏了复选标记。

所以在cellForRowAtIndexPath 中,您应该根据单元格是否被选中显式设置复选标记可见或隐藏,这样当单元格被重新用于新项目时,它会正确隐藏或显示复选标记。

【讨论】:

以上是关于tableview 编辑模式单元格选择复选标记在滚动时消失的主要内容,如果未能解决你的问题,请参考以下文章

清除搜索结果后,Swift Tableview 搜索结果单元格选择复选标记未保存

tableViews 中的搜索和复选标记

滚动时重复 TableView 上的复选标记

ios swift:Tableview“un”-复选标记单元格

在 NSUserDefaults 中保存复选标记 - 动态 TableView

如何在 UITableView 的编辑模式下只显示复选标记选择而不选择整个 UITableViewCell?