ios - 与 UITableView 的 super View 上的 UIPanGestureRecognizer 冲突

标签 ios swift xcode uitableview uipangesturerecognizer

我正在尝试构建与 iOS 上 Apple map 中的抽屉菜单大致相似的东西。

在此Xcode project我在 VC 的 View 上附加一个 UIPanGestureRecognizer,当平移发生时,垂直移动 UITableView 并禁用滚动。

问题是每次平移结束后,只有在 UITableView 上的某处发生第二次点击后才会调用 didSelectRow 方法。当然,我希望在第一次点击后调用它。

有趣的是,如果我启用表格滚动,并且在手势识别器的委托(delegate)中有 shouldRecognizeSimultaneouslyWith 返回 true,则不会发生该错误。

另一个有趣的事情是,如果您尝试将手指放在抽屉内列表中最近的位置条目上,然后尝试将抽屉向上拉,Apple map 本身似乎也会发生类似的事情。

感谢您的帮助!

最佳答案

我不太明白你在说什么。 但我认为主要问题在于“Chain Responder”。当您使用PanGestureRecognizer时和 UITableView属性(property)isScrollEnable = false在响应者链中 PanGestureRecognizer它是第一个被调用的人,系统等待失败或事件未处理,然后将其传递给响应者链中的下一个,即 UITableView 。因此,需要很长时间才能被称为 didSelectRow功能 我建议您创建一个新的 UIView并插入 ViewController在 Storyboard o Nib 中输入 UITableVIew除此之外UIView ,然后链接 PanGestureRecognizer到那个新的UIView 。这样,响应者链就不会与两者发生冲突,因为系统可以检测到拖动何时位于新的 UIView 中。并仅调用 PanGestureRecognizer当它位于UITableView时将调用didSelectRow

致以诚挚的问候 如果没有解决就写

关于ios - 与 UITableView 的 super View 上的 UIPanGestureRecognizer 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52019149/

相关文章:

ios - UICollectionView 单元可重用性问题 - swift

ios - 快速单击按钮时出错

ios - 如何使用 Swift 获取 youtube channel 的所有播放列表?

ios - 如何在 Swift 中调用 IMP?

ios - 传输安全已阻止明文 HTTP (XCode 8)

ios - Flutter 运行 - 无法构建 iOS 应用程序 - 命令 PhaseScriptExecution 失败,退出代码非零

ios - Visual Studio 中仅支持 ARM64 架构

ios - UIButton 图像与 UIToolbar 上的 UIBarButtonItem 居中

ios - cocoa bean : List all versions of a pod ever released and see version history

ios - Swift Sprite-kit 移动对象