点击时表格视图单元格分隔线消失

Posted

技术标签:

【中文标题】点击时表格视图单元格分隔线消失【英文标题】:Tableview cell separating line disappears when tapped 【发布时间】:2014-11-25 01:38:13 【问题描述】:

我有一个带有自定义表格视图单元格的UITableView,每个单元格之间都有分隔线。我最近开始在编辑模式下实现多单元格选择。为了在选择每个单元格时有蓝色圆圈复选标记,我将单元格 selectionStyleUITableViewCellSelectionStyleNone 更改为 UITableViewCellSelectionStyleDefault。为了在选择单元格时摆脱灰色阴影,我刚刚实现了一个像这样的白色背景:

UIView * cellBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
cellBackgroundView.backgroundColor = [UIColor clearColor];
cell.multipleSelectionBackgroundView = cellBackgroundView;
cell.selectedBackgroundView = cellBackgroundView;

问题是当我不处于编辑模式时,只要选择单元格,分隔线就会消失,但是当我在编辑模式下选择单元格时,该行仍然存在。知道如何解决此问题,以便始终保留分隔符吗?

【问题讨论】:

这里可能的原因是每当您编辑单元格时,视图cellBackgroundView 将与分隔线重叠。检查删除它。 这就是我最初的想法。我通过减少cellBackgroundView.frame.size.height 来测试它,它仍然在发生。此外,这也不能解释为什么只有在我不处于编辑模式时选择一个单元格时才会发生这种情况。当我在编辑模式下选择一个单元格时,这些线条仍然存在。 它的 bug 可能来自 Xcode。检查不同的模拟(更改设备版本)也检查不同的 Xcode 版本。 【参考方案1】:

尝试以下:

添加这行

[tableView deselectRowAtIndexPath:indexPath animated:YES];
[tableView reloadRowsAtIndexPaths:@[indexPath]
                 withRowAnimation:UITableViewRowAnimationAutomatic];

在 didSelectRowAtIndexPath 的开头

这是 ios7.0 以来存在的奇怪错误

【讨论】:

【参考方案2】:

我知道单元格分隔符消失是一个常见问题,但目前的解决方案似乎都没有解决我的问题,所以我得出的结论是,当我的 tableView 是不在编辑模式和UITableViewCellSelectionStyleBlue当我处于编辑模式时。我可以通过在包含我的表视图的视图控制器中调用以下命令来实现这一点:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    if(tableView.editing)
    
        [((customTableViewCellClass*)[tableView cellForRowAtIndexPath:indexPath]) changeSelectionStyle:YES];
    
    else
    
        [((customTableViewCellClass*)[tableView cellForRowAtIndexPath:indexPath]) changeSelectionStyle:NO];
    

return indexPath;

然后在我的自定义 tableviewcell 类中,我调用以下内容:

-(void) changeSelectionStyle: (BOOL) selected

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


cellForRowAtIndexPath 中,我留下了更改multipleSelectionBackgroundView 视图的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    UIView * cellBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
    cellBackgroundView.backgroundColor = [UIColor clearColor];
    cell.multipleSelectionBackgroundView = cellBackgroundView;
    cell.selectedBackgroundView = cellBackgroundView;

【讨论】:

以上是关于点击时表格视图单元格分隔线消失的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 的单元格分隔符在滚动后消失

触摸表格视图中的单元格后标签栏消失

将单元格插入表格时,自定义表格视图单元格内的图像视图消失

滚动单元格时表格视图设置消失

指定表格页脚时,最后一个单元格上的uitableview分隔符丢失

当我向下滚动表格视图时,隐藏单元格的复选标记消失了