gpt4 book ai didi

ios - 停止 UITableView 消耗触摸事件,以便父 View 中的滑动菜单可以检测到水平滑动

转载 作者:可可西里 更新时间:2023-11-01 03:29:40 27 4
gpt4 key购买 nike

为了实现如此简单的目标,我快要绝望了。

我有一个带有菜单的 View ,使用 touchEvents 从左侧滑动,当它被打成水平滑动手势时。我不使用手势识别器,我只是使用 touchesBegan、touchesMoved 等。并跟踪起始触摸位置、中间触摸位置和结束触摸位置之间的 x 坐标差异。效果很好。

但是,当我在正文中有一个 UITableView 时,触摸事件不再在层次结构中向上找到管理菜单的 View 。我试图通过将触摸传递给 superview/nextResponder 来解决这个问题,这种方法可行,但我看到了一个 touchesBegan 和 2 个 touchesMoved 调用,然后它就停止在层次结构中进一步向上处理。

具体来说,我有一个 SlideMenuView,其中有一个菜单 View 和一个正文 View 。在正文 View 中,我在某个时候有 UITableView。我看到(通过 NSLog)touches* 方法从头到尾都被调用得很好。我将它们传递给 nextResponder,并开始在 SlideMenuView 中看到它们 - 但在调用 touchesMoved 两次后,它们似乎在 SlideMenuView 中停止,但在我的 UITableView 中继续。

我正在重写 UITableView 来执行此操作,但我没有在其中做任何更改。

我知道这一定是可能的,因为它在 Facebook 应用程序中。您可以在 body 的任何地方滑动,水平滚动并显示菜单。我希望这里自然发生同样的事情,但看起来好像发生了一些奇怪的事情,并且 UITableView 正在消耗或破坏事件。

谁能帮我解决这个问题?一定有人以干净的方式实现了这一目标。

最佳答案

好的,对于任何感兴趣的人 - 我找到了一个干净的解决方案。

Apple 知道他们在做什么。回到过去,我们曾经重写 touchesBegan,...但随后他们引入了 GestureRecognizers。对于某些控件,例如 UIScrollView(以及任何子类,例如 UITableView),它们似乎破坏了它们的事件响应系统。我错误地假设 Gesture Recognizers 没有做任何特别的事情,只是挂接到这些 touchesBegan,...方法 - 这是不正确的。

最安全的方法是使用手势识别器。具体来说,它们有一些选项可以发挥重要作用。例如 .cancelsTouchesInView = YES 在我的例子中。

所以我所做的是在菜单 View 上使用 PanGestureRecognizer,将 .cancelsTouchesInView 设置为 YES,并且它起作用了。我将避免 touchesBegan,...就像瘟疫一样,并为任何复杂的事物编写自定义手势识别器。

我希望这能帮助像我一样拔头发的人!

关于ios - 停止 UITableView 消耗触摸事件,以便父 View 中的滑动菜单可以检测到水平滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12730747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com