8

我有一个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

4 回答 4

30

通常情况下,这是我的错误。

问题出在我的实现中tableView:cellForRowAtIndexPath:,我将单元格的selectionStyle属性设置为UITableViewCellSelectionStyleNone. 出于某种原因,这增加了在多选编辑模式下禁用左侧红色复选标记的“好处”。

设置cell.selectionStyle = UITableViewCellSelectionStyleGray;解决了这个问题。

于 2012-10-03T14:05:24.110 回答
1

旧线程,但我也遇到了这个问题,但是我发现我的自定义单元格的原因是在没有调用 super 的情况下覆盖了 setSelected 和 setHighlighted 方法。

这导致单元格无法选择。

于 2014-02-12T10:05:35.793 回答
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;
于 2014-02-26T20:13:39.550 回答
0

我有同样的问题。确保tableView:shouldHighlightRowAtIndexPath:返回YES,否则将不会发生选择,至少在 iOS 7 中是这样。

- (BOOL)tableView:(UITableView *)tableView
    shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
于 2014-06-05T08:31:32.587 回答