更改数据时,我的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和淡入循环之间做出某种延迟,但我不想强迫它工作,我希望它能够正常工作。
感谢。
答案 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中的行索引您指定匹配数据源中新添加的项目。