如何在UITableViewCell中获取透明附件视图? (带截图)

时间:2009-10-01 12:28:42

标签: iphone uikit uitableview interface-builder

我从笔尖使用自定义UITableViewCell。附件视图是详细信息披露指示器。问题是附件视图后面的UITableViewCell的背景颜色没有被渲染(参见下面的图像/源代码)。有线索吗?此外,这里有一些我试过但没有用的东西:

无效的事情: - 将附件视图的backgroundColor设置为clearColor
- 将单元格的contentView.opaque设置为FALSE
- 将表视图的contentView.opaque设置为FALSE
- 为单元格设置非默认附件视图


alt text http://www.chicknchoke.com/so/IMG_8028.png

    -(void)showTablePrep
    {
        myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 480, 320, 416) style:UITableViewStylePlain];
        myTableView.dataSource = self;
        myTableView.delegate = self;
        myTableView.delaysContentTouches = FALSE;
        myTableView.opaque = FALSE;
        myTableView.rowHeight = 60;

        [UIView beginAnimations:@"SlideUp" context:nil];
        [UIView setAnimationDuration:0.3f];

        [myTableView setCenter:CGPointMake(myTableView.center.x, myTableView.center.y-436)];
        [self.view addSubview:myTableView];
        [self.view bringSubviewToFront:myTableView];

        [UIView commitAnimations];


    }




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

    FriendsCell* cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCellID"];

    if (cell == nil){

        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FriendsCellView" owner:self options:nil];

        cell = (FriendsCell*)[nib objectAtIndex:0];

        if(indexPath.row % 2 == 0){

        cell.contentView.backgroundColor = [UIColor grayColor];


        }else{

        cell.contentView.backgroundColor = [UIColor lightGrayColor];


        }
        cell.accessoryView.backgroundColor = [UIColor clearColor];
        cell.contentView.opaque = FALSE;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;


    if(f

riendsCounter > indexPath.row){


            cell.titleLabel.text = @"Label";
            cell.descLabel.text = @"Description goes here";

        }else{

            cell.titleLabel.text = @"";
            cell.descLabel.text = @"";
            cell.accessoryType = UITableViewCellAccessoryNone;

        }

        }

        return cell;    
    }

3 个答案:

答案 0 :(得分:11)

您正在为错误的单元格绘制背景颜色。我们会安排UITableViewCell,以便contentViewaccessoryView并排坐下。 (这样做是为了contentView可以剪辑其内容,使其不与配件视图重叠。问题不在于配件视图是不透明的,而是灰色背景根本不是在配件后面绘制的图。

自定义UITableViewCell背后绘制的背景的正确方法是自定义其backgroundView。我没试过,但由于你只是改变了颜色,你可以简单地将backgroundColor上的backgroundView颜色设置为你想要的颜色。

答案 1 :(得分:1)

我通过查看自定义表格视图单元格的子视图找到了答案。

看起来附件视图上面有一个按钮。通过在子视图中找到此按钮并更改其颜色,我可以更新附件按钮后面的背景颜色。

<UIButton: 0x3b4d690; frame = (277 0; 43 75); opaque = NO; layer = <CALayer: 0x3b3e0b0>>

for (UIView *aSubView in self.subviews) {
    if ([aSubView isMemberOfClass:[UIButton class]]) {
        aSubView.backgroundColor = [UIColor greenColor];
    }
}

不幸的是,我只能在

中找到此按钮
- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

我的自定义表视图单元类的方法。我已在我的应用程序中成功使用此功能,以在用户选择单元格时显示不同的高亮颜色。这应该指向正确的方向。

答案 2 :(得分:0)

我在iOS7上解决了这个问题但添加了

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

in

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

你在这里修改你的背景和其他bakcgrounds:

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // Add your Colour.
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setBackgroundColor:[UIColor colorWithHexColor:HIGHLIGHT_COLOR]];
}

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // Reset Colour.
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setBackgroundColor:[UIColor colorWithHexColor:UNHIGHLIGHT_COLOR]];   
}