UIView addSubview无法在UITableViewCell中使用

时间:2013-02-02 11:39:15

标签: objective-c uitableview uiview addsubview

barView我有一个表视图,在每个单元格中,我想绘制一些统计条。我在自定义单元格中创建了一个空UIView,其名称为mainView,它是绘制图表的视图。

cellForRowAtIndexPath我这样做:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomCellIdentifier";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    CGRect barRect = CGRectMake(0, 0, 100, 10);

    UIView *barView = [[UIView alloc] initWithFrame:barRect];
    [barView setBackgroundColor:[UIColor redColor]];
    [cell.mainView addSubview:barView];

    return cell;
}

加载时未显示barView。它仅在我从另一个标签更改并返回后显示,或者在单元格退出屏幕后显示

备注:

  • 我试过[cell.mainView setNeedsDisplay];
  • 我有一个用另一个自定义单元格制作的标题。

3 个答案:

答案 0 :(得分:1)

试试这个:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomCellIdentifier";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        CGRect barRect = CGRectMake(0, 0, 100, 10);
        UIView *barView = [[UIView alloc] initWithFrame:barRect];
        [barView setBackgroundColor:[UIColor redColor]];
        [cell addSubview:barView]; // use cell.mainView if you have that created somewhere other than here (like IB)
    }

    return cell;
}

dequeueResuable...可以返回nil单元格。所以你需要检查一下,看看是否应该分配/初始化一个新单元格。在我给你的代码中,如果dequeueResuable...返回一个正确的单元格,那么它将在子视图已经完整的情况下创建。因此无需重新添加它(因此仅在if (!cell)

中创建它

答案 1 :(得分:0)

您的说明清楚地表明您正在此功能之外填写barView。这样它只有在过渡后才能看到。 或者你只是在你提供的内容之外覆盖它(甚至覆盖主视图)。

检查你的viewdidload和viewdidappear等。

答案 2 :(得分:-1)

我已经轻松解决了这个问题:

- (void)viewDidAppear:(BOOL)animated
{
    [self.tableView reloadData];
}

在单元格完全加载之前,似乎无法在窗口中创建视图之前添加子视图。