Reload TableView 刷新tableview畫面(reloadData & updates)
(Tableview, reloadData, reloadSection, reloadRow, beginUpdates, endUpdates)
在繪製畫面時,會需要滑動的處理或是彈性化的繪製畫面
透過tableview呈現可以輕鬆做到
但是如果畫面的資料較複雜,例如:按鈕切換子分頁
會需要更新畫面
可以參考本文的介紹,依照需求去更新
reloadData()
官方文件:
reloadData 會更新TableView所有數據,包含其 cell、section header、section footer 以及其 index arrays 等等。
為了提高效率,TableView只重新顯示當下的欄位,但如果cell欄位更新後縮小,cell也會更新畫面,縮小欄位高度。
reloadData後TableView的delegate跟data source也重新執行,因此需要消耗較多的效能,因此較適合應用於畫面初始化後,api取得資料後的更動畫面使用。
可以應用於資料更新時(數量)刷新畫面,但如果只是想要更新某部分的資訊,可以考慮其他的更新方式。
如果刪除或新增row,可以使用reloadRow或是reloadSection刷新畫面
(待下方介紹)
如果單純調整畫面(高度或畫面更新),欄位順序皆不變,可以使用beginUpdates() 跟endUpdates()(待下方介紹)
使用方式:
reloadSection()
官方文件:
reloadSection 會更新TableView中指定的Section所有數據,根據data source定義Section的設定,做Section畫面的更新,同時可以帶動畫提示用戶更改
如果畫面有伸展縮起的應用,很適合使用reloadSection刷新畫面,避免刷新重載時用過多的效能,也可能造成使用者體驗不佳。
使用方式:
IndexSet中integer指定刷新的secion
with:動畫方式(如下圖選項),不要動畫定義none
reloadRow()
官方文件:
reloadRow 會更新TableView中指定的Row所有數據,根據data source定義Row的設定,做Row畫面的更新,同時可以帶動畫提示用戶更改
如果只需要更新某行的cell畫面,例如按按鈕後或更換文字樣式等,很適合使用reloadRow刷新畫面,避免刷新重載時用過多的效能,也可能造成使用者體驗不佳。
使用方式:
IndexPath中定義要更新的row位置,設定在哪個section跟row
with:動畫方式(如下圖選項),不要動畫定義none
beginUpdates() . endUpdates()
beginUpdates文件
beginUpdates可以應用於後續的插入、刪除和選擇操作(例如 cellForRow(at:) 和 indexPathsForVisibleRows)同時進行動畫處理
不需要reloadRow重新載入Cell內容,透過beginUpdates且必須接著使用 endUpdates() 方法來改變cell高的動畫。
且不應該在beginUpdates&endUpdates中使用reloadData。如果同時使用reloadData,必須要額外自己寫其他的動畫。
endUpdates文件
透過endUpdates來做beginUpdates開頭動作的結尾,中間可能操作插入、刪除和選擇操作(例如 cellForRow(at:) 和 indexPathsForVisibleRows)時的動畫。
使用方式:
效果會像這樣,畫面更新時由上往下刷的動作
如果要取消動畫,可以參考下方做法
或是
畫面更新後不會有動畫