【问题标题】:cell.selectedBackgroundView covering up UIViews in a cellcell.selectedBackgroundView 覆盖单元格中的 UIView
【发布时间】:2013-06-19 11:09:59
【问题描述】:

我有一张桌子。在表格的每个单元格中,我创建了一个简单的条形图(只有 2 个填充背景的 UIView)。

我已将 cell.selectedBackgroundView 设置为图像。

当单元格被选中时,它似乎覆盖了部分条形图。有谁知道为什么?

红色是选中的单元格。顶部和底部是未选中的单元格:

图中灰色条、棕色条、2个数字(x.xx)和左边的半透明线,都是1个UIView的子视图。 UIView 被添加到单元格中。线和 2 个数字仍然存在,但 2 个条已消失。

这里有一些代码:

单元格选择的图像设置如下:

UIImage *selectedRowImage = [UIImage imageNamed:@"table-selectedcellbg-red-45px-stretch.png"];
cell.selectedBackgroundView = [[UIImageView alloc]initWithImage:[selectedRowImage resizableImageWithCapInsets:UIEdgeInsetsMake(selectedRowImage.size.height, selectedRowImage.size.width/2, selectedRowImage.size.height, selectedRowImage.size.width/2)]];
[cell sendSubviewToBack:cell.selectedBackgroundView]; // This didn't make a difference

像这样添加视图集:

UIView *graph = [barGraph getGraph];
UIView *graphView = [[UIView alloc]initWithFrame:CGRectMake(150, (tableView.rowHeight - graph.frame.size.height)/2, graph.frame.size.width, graph.frame.size.height)];
[graphView addSubview:graph];
[cell addSubview:graphView];

有什么想法吗?

【问题讨论】:

  • 如果您将graphView 转发会发生什么?
  • 刚刚添加了这个,[cell bringSubviewToFront:graphView];没有不同。我认为这不是前进/后退的问题,因为数字和线路出现了。如果 UIView 在后面,那么两个条、线和数字都应该被隐藏。
  • 是的,没错。傻我
  • 同样的问题,找不到解决办法。在我的项目中,在 cellForRow 期间添加了背景 View 和 selectedBackgroundView。然后,当被选中时,什么也没有发生。如果我在 setSelected 中添加一个 selectedBackgroundView,它会抛出所有其他视图。用 RevealApp 证明。
  • 您找到解决方案了吗?

标签: uiview uitableview


【解决方案1】:

我觉得可以在UITableViewClass Reference找到答案:

selectedBackgroundView

...

讨论

对于普通样式表中的单元格,默认值为 nil (UITableViewStylePlain) 和非nil 用于部分组表 (UITableViewStyleGrouped)。 UITableViewCell 添加 this 的值 仅在选择单元格时将属性作为子视图。 它添加了 选择背景视图作为背景正上方的子视图 视图 (backgroundView) 如果它不为零,或者在所有其他视图之后。 调用 setSelected:animated: 使选定的背景视图 使用 alpha 淡入淡出动画。

似乎selectedBackgroundView 仅在单元格的相应backgroundView 属性不是nil 时才能正常工作。

尝试添加backgroundView 并再次测试。

希望对你有所帮助。


编辑:

由于这不是解决方案,我试图重现您的问题,但没有成功:backgroundView 落后于QuestionMarkIcon(类似于您的graphView 的视图)..

代码:

- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath {
    //...

    UIImage* selectedRowImage = [UIImage imageNamed: @"strecheableImage.png"];
    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage: [selectedRowImage resizableImageWithCapInsets: UIEdgeInsetsMake(selectedRowImage.size.height, selectedRowImage.size.width/2, selectedRowImage.size.height, selectedRowImage.size.width/2)]];

    UIView* graph = [[QuestionMarkIcon alloc] init];
    UIView* graphView = [[UIView alloc]initWithFrame: CGRectMake(150, (tableView.rowHeight - graph.frame.size.height)/2, graph.frame.size.width, graph.frame.size.height)];
    [graphView addSubview: graph];
    [cell addSubview: graphView];
    // ...
}

这就是我的stretchableImage.png 的样子:

单元格 1 被选中,但 QuestionMarkIcon(您的图表)保持在前面:

对不起,我帮不上忙。

【讨论】:

  • 嗨 Anneblue,谢谢。我添加了一个背景视图,但仍然没有运气。我尝试了一个空白图像(cell.backgroundView = [[UIImageView alloc]initWithImage:[[UIImage alloc]init]];)这可能是Apple错误吗?
  • 我想我明白了。我的条形图是带有背景设置的 UIView。我认为选择单元格时,所有子视图都设置为透明。这就是为什么行和文本字段仍然出现的原因。我可以通过将我的 UIViews 设置为图像而不是填充背景颜色来解决此问题。我不确定为什么会这样,我最好的猜测是动画?不知道。
  • @Jason 做到了,选中后,单元格的子视图将使其背景变为透明。我只是使用此处找到的扩展名将视图的背景设置为图像而不是背景颜色:stackoverflow.com/questions/6496441/…
猜你喜欢
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
相关资源
最近更新 更多