如何更改tableview单元格文本?

时间:2013-05-19 19:17:10

标签: ios uitableview

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

enter image description here

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

  

oStartTimeCell.textLabel.text :( null)

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

您使用UILabel显示文字吗? 。如果您只是为UIlabel创建一个插座并更新它,那么在加载tableView之后调用的任何方法(如cellForRwoAtIndexPathdidSelectRowAtIndexPath等)都会更新。

如果您没有使用UILabel并且只使用cell.textLabel,您可以执行类似的操作 cell.textLabel.text = @"ChangedText"中的cellForRowAtIndexPathMethod。通过选中indexPath.row

确保您正在编辑所需的单元格

执行[tableView reloadData]调用cellForRowAtIndexPath。