2013-04-11 86 views
1

我有一個UITableView,在iPad的視口中包含大約20行。我有一個間隔定時器,定期調用UITableView'sreloadData(將其發佈到UI線程)。iPad UITableView閃爍問題

現在,當我以中等速度滾動UITableView(不那麼快)時,UITableView將刷新閃爍效果。

我必須編寫一個函數來手動更新UITableViewCell標籤,方法是循環訪問數組中的所有項目(此數組保留所有顯示在UITableView上的項目)。我將在定時器運行時執行此功能,而不是調用reloadData(如上所述)。然後閃爍的問題消失了。

我認爲reloadData應該比遍歷所有數據更好,因爲reloadData只刷新當前顯示的單元格而不是所有的行,但我無法弄清楚爲什麼會發生閃爍。有人知道爲什麼

我不得不提的一件事是我確實使用了CellIdentifier來重新使用該單元格,並且只在檢索到的單元格爲空時才創建單元格。

此外,我沒有在iPhone的這個問題,我相信,這是因爲iPhone有比iPad更少的行。

任何人都可以對這個問題做一些解釋嗎?

+0

你有沒有嘗試'[tblMsgConverstion beginUpdates]; [tblMsgConverstion endUpdates];'? – 2013-04-11 05:03:35

+0

@NitinGohel嗨,你介意怎麼做?在'beginUpdates'和'endUpdates'之間放置reloadData? – GMsoF 2013-04-12 04:16:10

回答

3

我在使用reloadData時出現閃爍的問題。我通過使用indexPathsForVisibleRowscellForRowAtIndexPath:來解決它,只更新可見單元格。性能很好,因爲我不必遍歷整個數據集,只需要有限數量的可見單元。

0

reloadData會導致tableview在屏幕上重新創建可見單元格,這會導致閃爍,因爲單元格會被破壞。有更好的方法來重新加載tableview。你在使用核心數據嗎?如果是這樣,NSFetchedResultsController和它的delegate是更新tableview的好方法,因爲它監聽基礎數據源中的更改並僅更新適當的單元格。