UITableView中透明文本背景的问题

时间:2009-12-05 15:48:32

标签: iphone uitableview iphone-sdk-3.0 background

我的tableview中有一个恼人的问题。我能够获得变色细胞(蓝色/白色/蓝色/ ......),但现在我的文字很麻烦,蓝色细胞上有白色背景。

我尝试过测试将背景颜色设置为红色:

// try to set the backgroundcolor of the text ???
cell.textLabel.text.backgroundColor = [UIColor redColor];

哪个不起作用;哼。

请查看下面的代码;任何人都可以通过给文本一个透明的背景来告诉我什么是错的以及如何解决我的问题?


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView 
             cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell
    cell.textLabel.text=[RssFeedNodes objectAtIndex:indexPath.row];

    // try to set the backgroundcolor of the text ???
    cell.textLabel.text.backgroundColor = [UIColor redColor];


    // show image in cell
    NSString *imageName=@"rss.png";
    cell.imageView.image=[UIImage imageNamed:imageName];

    // changing colors in cells
    NSInteger row = [indexPath row];
    if (row % 2){ 
        cell.contentView.backgroundColor = [UIColor whiteColor];
    }
    else { 
        cell.contentView.backgroundColor = [UIColor colorWithRed:0.90f green:0.95f blue:1.0f alpha:1.0f];
    }

    return cell;
}

4 个答案:

答案 0 :(得分:2)

你的答案在这里找到(并且很好地描述):http://undefinedvalue.com/2009/11/02/easy-gradient-backgrounds-uitextviewcells

我对解决方案的简要总结:对UITableViewCell进行子类化,然后在cellForRowAtIndexPath中创建实例时使用子类。

然后,您需要在子类UITableViewCell中只覆盖一个方法(setSelected):

  • (void)setSelected:(BOOL)选中动画:(BOOL)动画{

    [super setSelected:selected animated:animated];

    //配置所选状态的视图 for(UIView * view in self.contentView.subviews){     view.backgroundColor = [UIColor clearColor]; } }

原因似乎是内置的UITableViewCell类在根据setSelected方法中的表中的选择状态显示时将标签背景设置为白色(或选定的颜色)。替换你自己的,调用基类实现,然后设置你的子视图背景清除,以让你的contentView背景闪耀。

答案 1 :(得分:1)

文本没有背景,但textLabel有。所以

[[cell textLabel] setBackground:[UIColor redColor]];

答案 2 :(得分:1)

您需要将自己的UILabel标签添加到单元格中,并将其背景颜色设置为透明。由于某种原因,表格单元格所具有的标签没有可设置的背景颜色。

类似的东西:

UILabel* label = [[UILabel alloc] init];
label.frame = CGRectMake( 20, 10, 200, 22 );
label.backgroundColor = [UIColor clearColor];
label.opaque = NO;        
label.text = @"your text here:";
[cell addSubview:label];
[label release];

在这个例子中,我已经相当随意地设置了标签的框架(实际上,这不是从我自己的一些真实代码中修改过的)。在调整大小时,您可能需要更加动态,在这种情况下,您可能需要对单元格进行子类化并覆盖setFrame以使标签的帧保持同步。但硬编码的值应该让你现在就开始。

答案 3 :(得分:0)

#define LABEL_TAG 99
    // whatever your label rect size should be... change as appropriate
    UIlabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300.0, 30.0)]; 
    label.tag = LABEL_TAG;
    // set up alignment, font, autoresizemask, etc.
    label.backgroundColor = [UIColor clearColor];
    label.opaque = NO;
    [cell.contentView addSubview:label];
    [label release];

需要注意的是,您不会多次将自己的标签添加到可重复使用的表格单元格中。通过设置已知的view.tag属性,您可以获得(或发现存在)UILabel视图。 [cell viewWithTag:LABEL_TAG]

每当您将可重复使用的单元格出列时,首先获取对标签视图的引用,然后执行您在使用UITableCell的textLabel时通常会执行的操作。