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

问题描述 投票:-1回答:1

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

我希望它触发,当我触摸我的tableView时,但我仍然没有想出如何做到这一点。

知道我怎么能做到这一点?

ios objective-c cocoa-touch uiview
1个回答
1
投票

我找到了两个解决方案

  1. 如果你的tableView不需要处理触摸事件,你可以在故事板中取消选择checkBox'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)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.