帮助将backgroundView添加到UITableViewCell

时间:2009-11-23 05:13:23

标签: iphone objective-c cocoa-touch

我真的非常绝望地尝试将UIImageView添加到UITableViewCell.backgroundView。我所有的努力都导致了这种糟糕的渲染:

alt text http://img.skitch.com/20091123-ch8wk6pdxqkrn9tpftnhusigcy.jpg

看起来细胞标签的白色背景位于细胞背景的顶部并覆盖其中的部分。

我尝试将标签的背景颜色设置为clear或其他颜色,但它没有任何事件。它总是白色的。

我知道文本标签的背景导致这个白色区域的原因是,如果我不这样做[cell setText:@“Cell text here”];白色区域消失了,我只看到了细胞的背景图像。

这是我正在使用的代码。表视图添加到.xib文件中,UITableView添加到UIViewController:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [myCollection.items count];
}

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

    NSUInteger rowIndex = indexPath.row;
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"darkCellBackground.png"]];
        cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"darkCellBackground.png"]];
    }


    [cell setText:@"Cell text here"];


    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here. Create and push another view controller.
    // AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherView" bundle:nil];
    // [self.navigationController pushViewController:anotherViewController];
    // [anotherViewController release];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}

我确定我做错了什么但是无法弄清楚是什么。

6 个答案:

答案 0 :(得分:7)

解决方案在这里:Changing UITableViewCell textLabel background color to clear

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
     [[cell textLabel] setBackgroundColor:[UIColor clearColor]];
     [[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];
}

答案 1 :(得分:3)

你想要的是:

cell.backgroundColor = [UIColor colorWithPatternImage:[[UIImage imageNamed:@"some.png"]stretchableImageWithLeftCapWidth:320 topCapHeight:44]];

答案 2 :(得分:2)

您是否尝试将单元格的textLabel设置为不透明?

cell.textLabel.opaque = NO;

或者,如果您的背景是标签所在的纯色,您可以将标签的背景颜色设置为适当的颜色。


弃用旁注:

[UITableViewCell setText:]在操作系统3.0中已弃用 - 您不应该使用它(如果您正在构建3.0+),因为它可能在将来消失。相反,您应该使用UITableViewCell的textLabel属性直接设置UILabel的文本。


内存管理旁注:

您正在为使用此代码创建的每个UITableViewCell泄漏两个UIImageView实例。这些行

cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"darkCellBackground.png"]];
cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"darkCellBackground.png"]];

应更改为此

cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"darkCellBackground.png"]] autorelease];
cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"darkCellBackground.png"]] autorelease];

或者您可以使用release而不是autorelease(正确地执行;当然不要尝试用release替换autorelease)。无论哪种方式,UITableViewCell都拥有后台视图的所有权,因为您分配了释放对象所有权所需的对象。

答案 3 :(得分:1)

答案 4 :(得分:0)

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{

    cell.backgroundView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list-view-bg.png"] highlightedImage:[UIImage imageNamed:@"list-view-bg.png"]];


}

答案 5 :(得分:0)

将表格视图背景设置为清除颜色