静态UITableViewCell在CellForRowAtIndexPath上返回nil,但仅针对某些部分

时间:2013-05-23 00:25:17

标签: ios cocoa-touch uitableview

我在Storyboard场景中使用静态单元格定义了一个表格视图控制器。 表视图本身包含六个部分,每个部分包含一个或两个单元格。 我在视图控制器中将数据写入此方法的单元格中:

- (void)setUpAllCells
{
    //Charge Name
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];
    TableViewCellTextField *currentTextField = (TableViewCellTextField *)[[self tableView] cellForRowAtIndexPath:path];
    [currentTextField.textField setDelegate:self];

    //Charge Description
    path = [NSIndexPath indexPathForRow:1 inSection:0];
    currentTextField = (TableViewCellTextField *)[[self tableView] cellForRowAtIndexPath:path];
    [currentTextField.textField setDelegate:self];

    ...

    path = [NSIndexPath indexPathForRow:0 inSection:5];
    TableViewCellControl *currentControl = (TableViewCellControl *)[[self tableView] cellForRowAtIndexPath:path];
    [currentControl setValue:m_data->trailBurnTime];
}

来自:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self setUpAllCells];
}

当我运行应用程序时,除了最后一节之外,每个单元格都按照我的预期做出响应 最后一部分的单元格未连接到我的控制器,并保留了故事板场景中的默认值。我在setUpAllCells中设置了一个断点,发现cellForRowAtIndexPath为最后一节返回nil。

我已经将这种格式用于其他五个视图控制器,并且没有发生这种情况。

这是我到目前为止所尝试的内容:

  • 我使用自己的自定义TableViewCells测试了这个,当这些不起作用时,使用标准的UITableViewCells。最后一节总是返回nil。

  • 我重新排列了部分和细胞。最后一节总是返回nil。

  • 我完全删除了该部分。没有它,其他部分仍能正常工作。

  • 我添加了更多部分。关于在CellForRowAtIndexPath返回nil的第5节中的任何内容。

我在这里不知所措。我无法弄清楚是什么导致了这一点。

建议?

2 个答案:

答案 0 :(得分:1)

我不知道为什么你会得到你做的结果 - 当我尝试它并记录细胞时,我只获得了前3个部分的有效细胞。过去第2节的任何内容都是空的。坦率地说,我不确定它为什么会起作用,因为这不是Apple说填充静态表视图的方式。您应该在表视图控制器中将IBOutlets创建到单元格中的UI元素。在这方面,静态表视图更像是带有子视图的滚动视图,而不像表视图。您还可以将IBOutlet设置为单元格本身而不是单个UI元素,然后使用点表示法来处理自定义单元格中的任何属性,或者使用textLabel和detailTextLabel等标准属性。

答案 1 :(得分:0)

关于你的问题的有趣故事是,当你在tableview上调用函数cellForRowAtIndexPath时,我相信它会调用你应该实现的委托回调函数作为UITableViewDelegate,它为TableView提供了cellForRowAtIndexPath。

实现该功能后,您将获得该单元格。我认为您正在寻找的功能是:

– dequeueReusableCellWithIdentifier:forIndexPath:
– dequeueReusableCellWithIdentifier:

请看这里:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

我知道这不太可能是你正在寻找的答案,但事实是真的:)。