在单元格位于屏幕顶部之前,UITableView单元格不会绘制

时间:2012-03-01 20:16:09

标签: ios

我正在构建一个表,其中UITableView的每个单元格都是UIViewController。我需要在表的三行中显示三个不同的UIViewControllers。我设置每个单元格的行以匹配UIViewController的大小,因此每行都是不同的高度。

当应用程序首次启动时,只显示第一个单元格中的UIViewController。在我滚动表格以使该行的顶部位于屏幕顶部之前,下一行的内容不会显示。同样,如果我稍微向下滚动以使一行略微偏离屏幕底部,当我向后滚动一点时,行内容就会消失。

这是我正在使用的代码。注意:控制器是在viewdidload方法中创建的

我错过了什么?感谢

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:      (NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;


    switch(indexPath.section)
    {
        case 0:
        {
            [cell.contentView addSubview:patientInformationController.view];
            break;
        }
        case 1:
        {
            [cell.contentView addSubview:labsController.view];
            break;
        }
        case 2:
        {
            [cell.contentView addSubview:planController.view];
            break;
        }       


        default:
            break;
    }
}
return cell;
}

1 个答案:

答案 0 :(得分:1)

UITableViewController是一个巨大的高级构造,用于有效管理整个数据屏幕和UI对象。 UITableViewCell是一个小巧,高效,高度优化的视图类,旨在尽快绘制和更新。

从来没有向UIViewController's的{​​{1}}添加contentView视图。一些标签,一个图像,可能是一个小控件,如UITableViewCellUISwitch

如果您还没有,请开始阅读here

如果要将视图控制器(patientInformationController,labsController)与表视图的特定行相关联,正确的方法是将该行的单元格标签设置为人类可读的字符串,例如@&# 34;患者信息"或@" Labs",然后,当选择行时,使用UINavigationController推送正确的视图控制器。

UINavigationController管理一堆UIViewControllers。 UIViewController管理单个连贯的接口,通常由一堆协作视图组成。 UITableViewController是UIViewController的子类,它管理单个UITableView。 UITableView是一个专门用于快速呈现和呈现表格数据的类,根据您提供的委托和数据源组织成部分和行。 UITableView的一个功能是在用户选择UITableView的行时通知其委托,允许委托通过UINavigationController呈现新的UIViewController,以便向用户呈现更多细节和功能。

希望这会有所帮助。开始阅读。