我真的非常绝望地尝试将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;
}
我确定我做错了什么但是无法弄清楚是什么。
答案 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)
将表格视图背景设置为清除颜色