取消选中TableView单元格时,如何更新选中单元格计数?
解决方案
问题根源
你只实现了选中单元格时的更新逻辑,取消选中时没有触发计数器更新,同时单元格的选中状态UI处理可以优化。
代码修改步骤
添加取消选中的代理方法
在UsersController的UITableViewDelegate扩展中,补充didDeselectRowAt方法,触发计数器更新:extension UsersController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { updateCount() } func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { updateCount() } }优化自定义单元格的选中状态处理
将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 } }完善计数器更新方法
处理无选中行的情况,确保空值时显示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.
相关产品推荐
相关产品推荐

