0

我有一个 UITableView,我想在进行其他处理后更改一些静态单元格。我为要修改的单元格设置了插座,但是当我使用 NSLog 查看它们时,它们显示为 nil,这表明我没有正确的单元格。例如,在下图中,我想将开始时间添加到标签中,就像我为 Date 所做的那样(日期是在创建获得当前日期的单元格时完成的),

在此处输入图像描述

我点击显示指示器,它将我带到另一个场景(这是在 Storyboard 中创建的,使用 segues 从一个场景到另一个场景),在那里我得到了我需要的两次。然后我返回主场景(如图所示)并尝试更改开始时间标签,但没有任何反应。在尝试更改标签之前,标签的 NSLog 会返回:

oStartTimeCell.textLabel.text:(空)

我在其中一个 Apple 文档中读到此文本字段是只读的。如果在这种情况下是真的,有没有办法可以用更新的信息重新加载单元格?还是有其他方法可以做到这一点?

4

3 回答 3

2

你使用了错误的方法。您不应使用插座创建对单元格的引用。一旦单元格移出可见视图,出口将为空或包含垃圾数据。即使(在您的情况下)单元格永远不会移出视野,我认为它表明您正在尝试以一种不应该的方式使用 UITableView。

而是将要显示的数据放在数据源中的单元格中,例如数组。

tableView 应该使用 dataSource 来配置单元格的 textLabels 中显示的值。一旦要更新单元格中显示的文本,更改 dataSource 中的值并调用reloadDatatableView 以强制 tableView 调用-tableView:cellForRowAtIndexPath:和相关的 UITableViewDataSource 方法。

于 2013-05-19T20:10:18.837 回答
0

您是否使用 UILabel 来显示文本?. 如果您只是创建一个插座UIlabel并更新它,那么在加载 tableView 后调用的任何方法(如cellForRwoAtIndexPath或等)。didSelectRowAtIndexPath

如果您不使用 UILabel 并且仅使用 cell.textLabel ,则可以执行类似 cell.textLabel.text = @"ChangedText"in 的操作cellForRowAtIndexPathMethod。通过检查确保您正在编辑所需的单元格indexPath.row

[tableView reloadData]调用 cellForRowAtIndexPath 。

于 2013-05-19T20:05:17.953 回答
0

尝试为每个单元创建一个 IBOutlet 并连接它:

IBOutlet UITableViewCell *cell1;
IBOutlet UITableViewCell *cell2;
IBOutlet UITableViewCell *cell3;

并将您的方法更改为:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(indexPath.row == 0) return cell1;
    if(indexPath.row == 1) return cell2;
    if(indexPath.row == 2) return cell3;

    if (cell == nil) {
        //create cell;
    }
    return cell;
}
于 2013-05-19T19:40:35.417 回答