如何将 tableView.indexPathForRow(at: touchPoint) 与部分一起使用

How do I use tableView.indexPathForRow(at: touchPoint) with sections

我使用部分来加载消息 (viewForFooterInSection) 并使用行来加载特定消息的回复(如果有的话)。

以前我在 tableView 上使用长按手势来检测 tableView 上的触摸和 return 使用 tableView.indexPathForRow(at: touchPoint) 的 indexPath,但是我没有找到类似的获取长按单元格索引路径的方法

有人可以帮忙吗?

当您已经在 tableview 上使用手势获取 indexPath 时,我不确定您为什么要进行单元级手势。如果您尝试从 indexPath 获取单元格,那么您可以尝试

guard let cell = tableView.cellForRow(at: indexPath) else { return }

无论如何来回答你的问题,我们可以通过以下方式从单元格级别获取indexPath。

protocol CustomCellDelegate: AnyObject {
func longPressAction(onCell: CustomCell)

}

class CustomCell: UITableViewCell {

weak var delegate: CustomCellDelegate?

override func awakeFromNib() {
    super.awakeFromNib()
    let lg = UILongPressGestureRecognizer(target: self, action: #selector(longPress))
    lg.minimumPressDuration = 0.5
    lg.delaysTouchesBegan = true
    self.addGestureRecognizer(lg)
}

@objc func longPress(gestureReconizer: UILongPressGestureRecognizer) {
    if gestureReconizer.state != UIGestureRecognizer.State.ended {
        return
    }
    delegate?.longPressAction(onCell: self)
}
}

然后在您的行方法的表格视图单元格中,分配委托。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as? CustomCell else { return UITableViewCell() }
    cell.delegate = self
    return cell
}

并确认您 viewController 中的 CustomCellDelegate 协议。

extension ViewController: CustomCellDelegate {
func longPressAction(onCell: CustomCell) {
    guard let indexPath = tableView.indexPath(for: onCell) else { return }
    print(indexPath.section, indexPath.row)
}
}