为什么我的[tableview reloadData]执行得太晚了?

时间:2012-02-16 19:02:05

标签: ios xcode uitableview reloaddata

更改数据时,我的tableview会发生一些奇怪的事情。我有这样的事情:

// fadeout existing data
... // change data (new values for the cells are blank)
for{ // loop all rows
[TableView reloadRowsAtIndexPaths: withRowAnimation:]; // smooth fade out
}

// add one new row to the table
... // change data (just add one new row but leave the cells empty)
[TableView reloadData] // reload all of the data (new row should be added)

... // change data (just add values to the existing cells)
for{ // loop all rows
[TableView reloadRowsAtIndexPaths: withRowAnimation:]; // smooth fade in
}

理论上,至少我认为,这应该有效。但是我有一些故障,所以我在for循环和- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中添加了NSLogs,所以我注意到我的[tableView reloadData]在淡入循环的第一行之后执行!@#

我正在考虑在reloadData和淡入循环之间做出某种延迟,但我不想强迫它工作,我希望它能够正常工作。

  • 有没有更好的方法来完成我想要做的事情?
  • 我可以动态地在表格底部添加一行而不调用'reloadData'方法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

是的,只需使用tableView insertRowsAtIndexPaths方法,然后调用dataSource来加载这些新行。

要在表的末尾加载单行,您首先要更新数据源以包含新行,然后使用以下命令生成索引路径:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[yourdata count]-1 inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[tableView insertRowsAtIndexpaths:indexPaths withRowAnimation:whateveryouwant];

请记住,这会立即调用你的tableView:cellForRowAtIndexPath方法,所以在将新行插入表之前更新你的dataSource以包含额外的行,并注意indexPath中的行索引您指定匹配数据源中新添加的项目。