2012-02-16 69 views
1

改變數據時,我的桌面視圖正在發生奇怪的事情。我有這樣的事情:爲什麼我的[tableview reloadData]執行得太晚?

// 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循環中添加了NSLogs,並在:- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath,所以我注意到我的[tableView reloadData]在循環第一行淡入之後執行!@#

我正在考慮做出某種reloadData和淡入循環之間的延遲,但我不想強制它的工作,我希望它能正常工作。

  • 有沒有更好的方法來完成我想要做的事情?
  • 我可以在不調用'reloadData'方法的情況下在表底部動態添加一行嗎?

謝謝。

+1

你不需要在每一行上執行for()循環來重新加載它。 reloadRowsAtIndexPaths需要一個索引路徑數組,因此只需創建所有行的數組,然後使用一次重新加載就可以完成。 – jsd 2012-02-16 19:26:13

回答

1

是的,只需使用tableView insertRowsAtIndexPaths方法,它將調用你的dataSource來加載這些新行。

要在你的表的末尾加載單行,你首先更新您的數據源,包括新行,然後使用生成indexpath:

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

記住,會馬上打電話給你tableView:cellForRowAtIndexPath方法,因此請更新您的dataSource以在之前包含額外行將新行插入到表中,並且要小心您指定的indexPath中的行索引與數據源中新添加的項匹配。

相關問題