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 搜索结果单元格选择复选标记未保存
ios swift:Tableview“un”-复选标记单元格