我想在用户单击一个单元格时在tableView顶部显示单元格的backgroundView。但没有显示任何内容。代码如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UIView *v = cell.backgroundView;
[v setBackgroundColor:[UIColor redColor]];
CGRect r = [v convertRect:v.bounds toView:self.view];
[self.view addSubview:v];
v.frame = r;
cell.backgroundView = nil;
}
提前致谢。
答案 0 :(得分:0)
根据您的问题,我了解您希望在用户点击单元格时显示单元格的选择。
为此使用表的委托函数如下
- (void)tableView: (UITableView*)tableView willDisplayCell: (UITableViewCell*)cell forRowAtIndexPath: (NSIndexPath*)indexPath
{
cell.backgroundView = [[[UIImageView alloc] init] autorelease];
if(selectedSongIndex==[indexPath row])
{
((UIImageView *)cell.backgroundView).image=[UIImage imageNamed:@"lineSelected.png"];
}
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
}
这里我将图像设置为显示选择但是如果要显示颜色,则更改视图的背景颜色。
确保在didSelectRowAtIndexPath
函数调用reload
函数表中,然后在该集selectedSongIndex=indexpath.row
答案 1 :(得分:0)
addSubview将保留视图,
但你使视图为零cell.backgroundView = nil;
所以它是空白的。
列出子视图以检查
for (UIView *v in self.view.subviews) {
NSLog(@"subviews_____ %@",v );
}
如果你想保留cell.backgroundView
你可以使用这样的深层副本:
UIView *v = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:cell.backgroundView]];