如何使滚动视图将触摸事件传递给超级视图?

时间:2018-12-24 17:03:12

标签: ios swift uitableview uiscrollview uistackview

我正在尝试创建一个UITableViewCell,它具有水平滚动的UIScrollView。如何确保当用户触摸UIScrollView时,UITableViewCell被选中。

UITableViewCell具有UIScrollView作为子视图以及其他一些子视图。当用户点击非UIScrollView子视图时,将按预期选择单元格。 但是,当用户点击UIScrollView时,什么也没有发生。

UIScrollView有一些子视图。用户可以按预期水平滚动滚动视图。

是否存在某种方式,当用户轻拂UIScrollView时,UIScrollView处理触摸事件,但是当用户轻按UIScrollView时,它将事件传递给超级观看?

编辑- 我尝试如下重写touchesEnded(_:with:)-

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    superview?.touchesEnded(touches, with: event)
}

它不起作用

其次,我尝试将UITapGestureRecognizer添加到滚动视图,并检查是否检测到敲击。 它确实检测到水龙头。但是,为了选择UITableViewCell,我需要获取相应的UITableViewCell的滚动视图,找到其indexPath,然后使用UITableView选择该indexPath。

我希望是否有一种更简单的方法来执行我要达到的目标。

1 个答案:

答案 0 :(得分:0)

我通过在滚动视图中添加UITapGestureRecognizer来解决了这个问题。

在用户点击滚动视图时调用的函数中,我以编程方式选择该行,如下所示-

guard let indexPath = tableView.indexPath(for: cell) else { return }
tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
tableView(tableView, didSelectRowAt: indexPath)