2011-09-03 52 views
0

我有一个是被实例化(在“的cellForRowAtIndexPath”法)设置文本当未选择细胞

[cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton]; 

当点击了“附件按钮”一个UITableViewCell,我有一个的UIDatePicker是弹出应该将单元格的文本设置为被选中的日期。拾取器出现,我的单元格不是零,但是,我看不到单元格的实际文本(日期),直到单击它(单元格,而不是“附件按钮”)。

这里是设置文本的代码:

targetCell.textLabel.text = [formatter stringFromDate:_datePicker.date]; 

targetCell是当该方法的一个实例变量感组:“accessoryButtonTappedForRowWithIndexPath”之称。

就像我说的,我知道文本正在单元格中设置,因为当我点击实际的单元格时,我可以看到在选择器中选择的日期。

+0

执行此语句的内部方法是什么? 'targetCell.textLabel.text = [formatter stringFromDate:_datePicker.date];' –

+0

IBAction里面我创建了一个处理日期选取器的“Value Changed”事件 –

+1

您是否在设置单元格的值之后重新载入表格? – mayuur

回答

1

看起来好像你试图直接修改当前显示的表格视图单元格。即使您设法以这种方式进行更改,这仍然不起作用,因为当您的行在视图外滚动时,其相应的单元格将被重新用于另一行。因此,您的更改将丢失,否则您将显示错误的内容。

管理这个正确的方法是:

  1. 更改您的数据源,而不是细胞,当值从日期选取器
  2. 刷新通过重新载入细胞的观点挑
    • 使用-[UITableView reloadData],或
    • 整个表视图仅仅是行使用-[UITableView reloadRowsAtIndexPaths:withRowAnimation:]

使用这些方法中的任何一种都会导致表视图数据源的-tableView:cellForRowAtIndexPath:被调用,这将更新具有新单元格的行。因此,即使滚动出视图,该行也会显示正确的日期。