2015-01-10 27 views
0

我已經找到2個函數來重新加載我的UITableView行什麼是更可靠的方式來重新加載UITableView數據?

1st。

[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] 
       withRowAnimation:UITableViewRowAnimationNone]; 

2nd。

[tableView reloadData]; 

什麼是重載的UITableView的數據更具體的方式

+0

答案取決於您事先對數據源所做的更改。 reloadData將始終工作,但可能會過度殺傷。重新加載可見的行可能會工作或應用程序可能會崩潰。 – rmaddy

回答

1

兩者都是「可靠」和可能的「具體」(根據您的具體意思) - 事實上,還有更多的方法:

reloadData 
reloadRowsAtIndexPaths:withRowAnimation: 
reloadSections:withRowAnimation: 
reloadSectionIndexTitles 

檢查開發者文檔(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/index.html)上的差異,但簡短的回答是,他們都是可靠的 - 它只是取決於你想要多少信息重新加載,如果你想做到這一點的動畫。

例如,如果您只想重新加載某些行,則可以使用reloadRowsAtIndexPaths:withRowAnimation:。如果您想重新加載整個部分,請使用reloadSections:withRowAnimation:

+0

這意味着唯一不同的是,我的第一個功能重新加載它與動畫和第二個不是。 – haresh

+0

不,reloadData會重新載入所有的行(在調用的時候只有可見的會被重新載入)。 'reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows]'只重新加載可見的 - 不可見的單元不會被重新加載 –

+0

不,這是inCorrect我測試了它,reloadData只重新加載可見單元及其部分。雖然reloadRowsAtIndexPaths:只重新加載可見單元格,甚至沒有它的部分。 – haresh

0

這個答案可能有兩種情況,

一),您對錶至少有一個部分(帶有標題或返回的截面圖)

  • 在這種情況下,如果你打電話reloadData,那麼它也會重新加載部分。但reloadRowsAtIndexPaths:withRowAnimation:只會重新加載可見單元格而不是部分。

b)你已經表有至少一節裏(沒有標題或返回的截面圖)

  • 在這種情況下,如果調用reloadDatareloadRowsAtIndexPaths:withRowAnimation:都只會重裝可見的細胞。

那麼哪一個更好?

  • 正如我所解釋的,根據案例,你應該調用任何一種方法。如果你有部分你不想重新加載,那麼你應該調用reloadRowsAtIndexPaths:withRowAnimation:方法。或者如果你想重新加載單元格,那麼應該調用reloadData方法。
+1

我確實知道它是如何工作的,但是對於更具體的方式來說,它有一點點困惑。你的答案讓我感謝你的答案。 – haresh

相關問題