在可多選的 TableView 中,上傳成功後刷新列表,原本勾選的 Cell 圖片卻跑到其他 Cell。根因是 dequeueReusableCellWithIdentifier 重用機制導致 Cell 狀態殘留,加上資料源與 UI 狀態不同步。
flag: 標記「正在進行上傳後刷新」,初值 -1 表示一般刷新。flag = 待上傳總數 (如 audioID.count + videoID.count)。flag--。cellForRowAt 中判斷:
if flag > 0 {
flag--
cell.butSelect.setImage(UIImage(named: "fx_02"), for: .normal) // 強制顯示未選中
} else {
flag = -1 // 歸位,後續正常刷新不再干預
// 根據資料源真實狀態設定圖片
cell.butSelect.setImage(dataSource[indexPath].isSelected ? selectedImg : unselectedImg, for: .normal)
}
flag 保持 -1 不干預。isSelected 布林屬性,作為唯一真實來源。isSelected = false,再 reloadData()。此模式同樣適用於 Objective-C、UIKit、SwiftUI (透過 State/ObservableObject) 等場景。