我有一个UITableView,我想在进行其他处理后改变一些静态单元格。我为我要修改的单元格设置了出口,但是当我使用NSLog查看它们时,它们显示为nil,这表明我没有正确的单元格。例如,在下面的图像中,我想将标签的开始时间添加到标签中,就像我为Date做的那样(日期是在创建我获得当前日期的单元格时完成的),
我点击披露指示器,它带我到另一个场景(这是在故事板中创建的,使用segues从一个场景到另一个场景),我得到了我需要的两次。然后我返回主场景(显示)并尝试更改开始时间标签,但没有任何反应。在尝试更改标签之前,标签的NSLog会返回:
oStartTimeCell.textLabel.text :( null)
我在其中一篇Apple文档中读到这个文本域是只读的。如果在这种情况下确实如此,有没有办法可以用更新的信息重新加载单元格?还是有另一种方法可以做到这一点吗?
答案 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之后调用的任何方法(如cellForRwoAtIndexPath
或didSelectRowAtIndexPath
等)都会更新。
如果您没有使用UILabel并且只使用cell.textLabel,您可以执行类似的操作
cell.textLabel.text = @"ChangedText"
中的cellForRowAtIndexPathMethod
。通过选中indexPath.row
执行[tableView reloadData]
调用cellForRowAtIndexPath。