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

时间:2019-03-18 21:08:06

标签: ios objective-c cocoa-touch uiview

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

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

有什么主意我能做到吗?

1 个答案:

答案 0 :(得分:1)

我找到了两种解决方案:

  1. 如果您的tableView不需要处理触摸事件,则可以在情节提要中取消选中复选框“已启用用户交互”,然后tableView超级视图将处理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)
    }
}