首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Swift TableView 多選刷新異常:核取方塊圖片錯位的解決方案

     編輯:程式設計疑難解答

在可多選的 TableView 中,上傳成功後刷新列表,原本勾選的 Cell 圖片卻跑到其他 Cell。根因是 dequeueReusableCellWithIdentifier 重用機制導致 Cell 狀態殘留,加上資料源與 UI 狀態不同步。

核心修正策略:旗標同步法

  1. 全域旗標 flag: 標記「正在進行上傳後刷新」,初值 -1 表示一般刷新。
  2. 上傳開始時: flag = 待上傳總數 (如 audioID.count + videoID.count)。
  3. 每上傳成功一個: flag--。
  4. 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)
    }
  5. 下拉刷新等一般操作: 直接讀取資料源狀態,flag 保持 -1 不干預。

關鍵點

  • 資料模型必須包含 isSelected 布林屬性,作為唯一真實來源。
  • 上傳完成後務必先更新資料模型 isSelected = false,再 reloadData()。
  • 避免在 Cell 裡保留任何暫時狀態,所有視覺呈現完全由資料模型驅動。

此模式同樣適用於 Objective-C、UIKit、SwiftUI (透過 State/ObservableObject) 等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved