我正在尝试构建与 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/