在iOS中,如何检测UITableview中的cell是否正在被滑动?

In iOS, how can I detect if a cell in UITableview is in the process of being swiped?

我正在使用 leadingSwipeActionsConfigurationForRowAt 来检测和处理滑动。但是,我需要能够检测到用户何时开始滑动,但在滑动完成之前。问题是,如果我在滑动单元格时使用 reloadData()beginUpdates() / endUpdates() 更新 table,它会将单元格重置为未滑动的位置(并且我不喜欢那种用户体验)。我希望能够延迟 cell/data 更新,直到滑动完成或取消。

您可以实施 willTransition(to:) in the UITableViewCell` 来检测滑动,请参阅: UITableViewCell documentation

在那里,只需在视图控制器中设置一个标志以防止更新。 您可能还需要在 viewWillDisappear 左右做一些事情,因为在某些情况下可能不会调用转换回调。

尽管安德烈亚斯的回答绝对正确,但我找到了一种更简单的方法。显然,每当使用 leadingSwipeActionsConfigurationForRowAt 时,只要开始滑动,单元格就会被标记为正在编辑。这允许我们在 UITableView 上使用 willBeginEditingRowAtdidEndEditingRowAt,而不必担心 UITableViewCell

var swipedRow: IndexPath? = nil
        
func tableView(_ tableView: UITableView, willBeginEditingRowAt indexPath: IndexPath) {
    swipedRow = indexPath
}
    
func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) {
    swipedRow = nil
}

然后你可以检查是否swipedRow == nil(另外,如果不是nil,你将知道被刷行的indexPath)