我正在尝试创建一个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。
我希望是否有一种更简单的方法来执行我要达到的目标。
答案 0 :(得分:0)
我通过在滚动视图中添加UITapGestureRecognizer
来解决了这个问题。
在用户点击滚动视图时调用的函数中,我以编程方式选择该行,如下所示-
guard let indexPath = tableView.indexPath(for: cell) else { return }
tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
tableView(tableView, didSelectRowAt: indexPath)