为什么addSubview不保留视图

时间:2014-04-18 05:45:47

标签: ios objective-c cocoa-touch

我想在用户单击一个单元格时在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;
}

提前致谢。

2 个答案:

答案 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]];