在UITableView中未使用allowMultipleSelectionDuringEditing在编辑模式下设置单元格

时间:2012-10-03 12:08:42

标签: ios uitableview multiple-select

我有一个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不会反映此情况。

4 个答案:

答案 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;
}