0

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];
  • 我有一个用另一个自定义单元格制作的标题。
4

3 回答 3

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...可以返回一个零单元格。所以你需要检查一下,看看你是否应该分配/初始化一个新单元。在我给你的代码中,如果dequeueResuable...返回一个正确的单元格,那么它会在子视图完好无损的情况下创建。所以不需要重新添加它(因此只在 中创建它if (!cell)

于 2013-02-02T16:05:00.787 回答
0

您的描述清楚地表明您正在此函数之外填充 barView。这样它只有在转换后才可见。或者您只是在此处提供的内容之外覆盖它(甚至覆盖主视图)。

检查您的 viewdidload 和 viewdidappear 等。

于 2013-02-02T13:06:22.820 回答
-1

我已经很容易解决了:

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

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

于 2013-02-05T15:26:58.423 回答