cell.selectedBackgroundView覆盖单元格中的UIViews

时间:2013-06-19 11:09:59

标签: uiview uitableview

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

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

选择单元格后,它似乎会覆盖条形图的某些部分。有谁知道为什么?

红色是选定的单元格。顶部和底部是未选择的单元格: enter image description here

在图像中,灰色条,棕色条,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];

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我认为答案可以在UITableViewClass Reference

中找到
  

<强> selectedBackgroundView

     

...

     

讨论

     

普通样式表格中的单元格的默认值为nil   (UITableViewStylePlain)和非nil用于节组表   (UITableViewStyleGrouped)。 UITableViewCell增加了这个值   仅在选择单元格时将属性作为子视图。 它补充说   选定的背景视图作为背景正上方的子视图   view(backgroundView)如果不是nil,或者在所有其他视图后面。   调用setSelected:animated:导致选定的背景视图   使用alpha淡入淡出来制作动画。

如果单元格的相应selectedBackgroundView属性不是backgroundViewnil似乎只能正常工作。

尝试添加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的样子: my <code>strecheableImage.png</code>

选择了单元格1,但QuestionMarkIcon(您的图表)保持在前面: Cell 1: selected - the QuestionMarkIcon (your graph) stays in front

抱歉,我无能为力。