iOS - 如何将触摸事件传递给Superview?

iOS - How to pass Touch Event to Superview?

我在 viewController 上实现了一个不可滚动的 tableView。在我的 viewController 上,我设置了 touchesBegan: 功能。

我希望它在我触摸我的 tableView 时触发,但我仍然不知道该怎么做。

知道如何实现吗?

我找到了两个解决方案:

  1. 如果您的 tableView 不需要处理触摸事件,您可以取消选中 storyboard 中的复选框 'User Interaction Enabled',然后 tableView superview 将处理 touchEvent。
  2. 如果你需要在单元格中处理事件,你可以在 UITableViewCell 子类中编写这样的代码,搜索下一个响应者直到找到 ViewController:
class CustomCell: UITableViewCell {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)

        var responder: UIResponder? = self
        var vc: UIViewController?

        while vc == nil {
            if responder is UIViewController {
                vc = responder as? UIViewController
                break
            }
            responder = responder?.next
        }

        vc?.touchesBegan(touches, with: event)
    }
}