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

取消选中TableView单元格时,如何更新选中单元格计数?

解决方案

问题根源

你只实现了选中单元格时的更新逻辑,取消选中时没有触发计数器更新,同时单元格的选中状态UI处理可以优化。

代码修改步骤

  1. 添加取消选中的代理方法
    在UsersController的UITableViewDelegate扩展中,补充didDeselectRowAt方法,触发计数器更新:

    extension UsersController: UITableViewDelegate {
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            updateCount()
        }
        
        func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
            updateCount()
        }
    }
    
  2. 优化自定义单元格的选中状态处理
    将selectionStyle的设置移到单元格初始化阶段(避免重复设置),简化UI状态切换逻辑:

    class CustomTableViewCell: UITableViewCell {
        override func awakeFromNib() {
            super.awakeFromNib()
            selectionStyle = .none // 仅初始化时设置一次
        }
        
        override func setSelected(_ selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
            // 用!selected简化条件判断
            shadowView.isHidden = !selected
            checkboxBtn.isHidden = !selected
        }
    }
    
  3. 完善计数器更新方法
    处理无选中行的情况,确保空值时显示0:

    func updateCount() {
        let selectedCount = usersTableView.indexPathsForSelectedRows?.count ?? 0
        usersNumber.text = String(selectedCount)
    }
    

说明

  • indexPathsForSelectedRows会自动维护当前选中的行数组,取消选中时该数组会自动移除对应的IndexPath,只需在选中/取消选中时调用updateCount即可同步数值。
  • 移除didSelectRowAt中手动修改cell UI的代码,因为setSelected方法会在选中/取消选中时自动调用,统一处理UI状态更规范。

内容的提问来源于stack exchange,提问作者Willian M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:35:29