You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UITableView滚动时勾选标记消失,现有方案无效求助

解决UITableView滚动时勾选标记消失的问题

嘿,我太懂你这个困扰了——滚动列表时勾选的标记突然消失,这是UITableView复用机制带来的典型问题,咱们马上来搞定它!

问题根源

你现在的代码里,每次创建(或复用)cell时,只设置了文字、颜色这些属性,但没有保存和恢复cell的勾选状态。当cell滚出屏幕后会被系统回收复用给新的行,而新行的勾选状态没有被正确设置,就出现了消失的情况。另外,你直接创建cell的方式let cell = UITableViewCell(...)也不符合复用规范,得改成系统推荐的复用方式。

分步解决方案

  1. 添加状态存储数组
    在你的ViewController里,新增一个数组来记录每一行的勾选状态,和你的players数组长度保持一致:
// 假设你的players数组是这样定义的:var players = [String]()
var selectedRows = [Bool]()

// 在初始化players的地方(比如viewDidLoad或者数据加载完成后),同步初始化状态数组
override func viewDidLoad() {
    super.viewDidLoad()
    // 示例:初始化players数据
    players = ["Player 1", "Player 2", "Player 3"]
    // 初始化所有行默认未勾选
    selectedRows = Array(repeating: false, count: players.count)
}
  1. 修改cellForRowAt方法
    改用正确的cell复用方式,并根据状态数组设置勾选标记:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // 用dequeue方式获取复用cell,这是正确的复用姿势
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    
    cell.textLabel?.text = players[indexPath.row]
    cell.textLabel?.textColor = UIColor.white
    cell.backgroundColor = colorForIndex(index: indexPath.row)
    cell.textLabel?.font = UIFont(name: "Chalkboard SE", size: 20)
    
    // 关键:根据保存的状态设置勾选标记
    cell.accessoryType = selectedRows[indexPath.row] ? .checkmark : .none
    
    return cell
}
  1. 处理点击事件,更新状态
    实现didSelectRowAt方法,点击cell时切换勾选状态并更新UI:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // 切换当前行的选中状态
    selectedRows[indexPath.row].toggle()
    
    // 更新对应cell的勾选标记
    if let cell = tableView.cellForRow(at: indexPath) {
        cell.accessoryType = selectedRows[indexPath.row] ? .checkmark : .none
    }
    
    // 可选:取消cell的高亮状态,让交互更自然
    tableView.deselectRow(at: indexPath, animated: true)
}

额外提示

如果你的players数组会动态增减元素(比如添加新玩家、删除玩家),记得同步更新selectedRows数组的长度,确保两者始终一一对应,避免状态错乱。

内容的提问来源于stack exchange,提问作者Adalberto Zauli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:50:44