我有一个UITableView
,配置为允许在编辑模式下选择多个单元格。但是,在触摸/选择单元格后,左侧的空白色圆圈永远不会变为红色圆圈,并带有白色复选标记。
我已阅读有关使用allowsMultipleSelectionDuringEditing
滑动删除问题的信息,因此我的setEditing:animinated
方法如下所示:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
self.tableView.allowsMultipleSelectionDuringEditing = editing;
[super setEditing:editing animated:animated];
}
网上的一些资源建议设置allowsSelectionDuringEditing = NO;
,但这没有任何效果。此外,我的单元格编辑样式设置为UITableViewCellEditingStyleDelete
,更改它也没有任何效果。
在编辑模式中触摸行时,会触发tableView:didSelectRowForIndexpath:
,但如上所述,UI不会反映此情况。
答案 0 :(得分:24)
事实上,我的错误就是如此。
问题出在我tableView:cellForRowAtIndexPath:
的实施中,我将单元格的selectionStyle
属性设置为UITableViewCellSelectionStyleNone
。出于某种原因,这增加了在多选编辑模式下禁用左侧红色复选标记的“好处”。
设置cell.selectionStyle = UITableViewCellSelectionStyleGray;
解决了问题。
答案 1 :(得分:1)
我有一个类似的问题,因为我正在努力确保我的细胞从未显示任何选择(对于“聊天泡泡”式的表格)。
所以当然这个修复导致我的桌子上有很大的颜色条,我必须找到另一种方法来摆脱它们。
在你的cellForRowAtIndexPath中,你可以设置selectedBackgroundView而不是设置selectionStyle,它也会启用复选框。视图可以是单元格的背景颜色,也可以是clearColor,然后不会显示任何内容。这是我的代码:
static dispatch_once_t onceToken;
static UIView * selectedBackgroundView;
dispatch_once(&onceToken, ^{
selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
selectedBackgroundView.backgroundColor = APP_CELL_BACKGROUND_COLOR;
});
cell.selectedBackgroundView = selectedBackgroundView;
答案 2 :(得分:0)
旧线程,但我也有这个问题,但是我发现原因是我的自定义单元格覆盖了setSelected和setHighlighted方法而没有调用super。
这导致细胞不可选择。
答案 3 :(得分:0)
我遇到了同样的问题。确保tableView:shouldHighlightRowAtIndexPath:
返回YES
,否则将无法进行选择,至少在iOS 7中。
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}