didDeselectRowAt 从未调用过[重复]
Posted
技术标签:
【中文标题】didDeselectRowAt 从未调用过[重复]【英文标题】:didDeselectRowAt never called [duplicate] 【发布时间】:2017-07-28 07:06:12 【问题描述】:我有一个 UITableView,其中 UITableViewDelegate 设置如下:
tableView = UITableView()
tableView.delegate = self
tableView.dataSource = self
在委托中我实现(以及其他)功能
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
我的继承自 UITableViewCell
的自定义 Cell 以这种方式覆盖 setSelected
:
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
if selected
// visual updates (with a small animation)
else
// visual updates
问题是,当点击单元格时,总是调用didSelectRowAt
而不会调用didDeselectRowAt
,因此,单元格总是显示为选中状态。我做错了什么??
【问题讨论】:
@Pipiks 我的 selectionStyle 未设置为.none
在 didSelectRowAt 中尝试 tableView.deselectRow(at: indexPath, animated: true)
这将导致单元格始终被取消选择
开启多个单元格选择
我打电话给reloadData()
,用reloadRows(at:,with:)
代替解决了问题
【参考方案1】:
你必须实现这个:
yourTableView.deselectRow(at: indexPath, animated: true)
在您的 didSelectRowAt 方法或您的 didDeselectRowAt 方法中。
希望这有帮助:)
【讨论】:
我通过在我的自定义单元格中调用super.setSelected(selected, animated: animated)
来做类似的事情。在didDeselectRowAt
中调用deselectRow
会导致无限循环。在didSelectRowAt
中调用它会导致单元格始终被取消选择。
所以你想选择你的行然后做一些事情然后取消选择它?对吗?
当它被选中时点击它应该取消选择。如果它在应该选择之前被取消选择。
@Daniel 像你敲击键盘一样好吗?以上是关于didDeselectRowAt 从未调用过[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在collectionView中调用tableView的didDeselectRowAt
URLSessionTaskDelegate 从未在命令行工具中调用[重复]