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 从未在命令行工具中调用[重复]

onIabPurchaseFinished 从未调用过。

Netty channelRead 从未调用过

iOS startUpdatingLocation 从未调用过

Firebase OnTokenRefresh() 从未调用过?