点击时表格视图单元格分隔线消失
Posted
技术标签:
【中文标题】点击时表格视图单元格分隔线消失【英文标题】:Tableview cell separating line disappears when tapped 【发布时间】:2014-11-25 01:38:13 【问题描述】:我有一个带有自定义表格视图单元格的UITableView
,每个单元格之间都有分隔线。我最近开始在编辑模式下实现多单元格选择。为了在选择每个单元格时有蓝色圆圈复选标记,我将单元格 selectionStyle
从 UITableViewCellSelectionStyleNone
更改为 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;
【讨论】:
以上是关于点击时表格视图单元格分隔线消失的主要内容,如果未能解决你的问题,请参考以下文章