我正在尝试构建一个与iOS上的苹果地图中的抽屉菜单大致类似的东西。
在这个Xcode project中,我在VC的视图上附加了一个UIPanGestureRecognizer,当平移发生时,垂直移动一个禁用滚动的UITableView。
问题是每次pan结束后,只有在UITableView上的某个地方发生第二次点击后才会调用didSelectRow方法。当然,我希望在第一次点击之后调用它。
有趣的是,如果我启用了表的滚动,并且在手势识别器的委托中让shouldRecognizeSimultaneouslyWith返回true,就不会发生错误。
另一件有趣的事情是,苹果地图本身似乎也发生了类似的事情,如果你试着把手指放在抽屉里列表中最近的位置条目上,就会把抽屉拉起来。
谢谢你的帮忙!
发布于 2018-08-26 11:18:20
我不太明白你在说什么。但我认为主要的问题是“Chain Responder”。当您在响应器链中使用PanGestureRecognizer和UITableView属性isScrollEnable = false时,PanGestureRecognizer是第一个被调用的人,系统等待失败或不处理该事件,然后将其传递给响应器链中的下一个响应器,即UITableView。因此,调用didSelectRow函数需要花费太长的时间,我建议您创建一个新的UIView并将其插入到情节提要中的ViewController中,然后将UITableVIew放在该UIView之外,然后将PanGestureRecognizer链接到该新的UIView。通过这种方式,响应器链不会与两者都发生冲突,因为系统可以检测拖拽何时位于新的UIView中,并且仅调用PanGestureRecognizer,而当它位于UITableView中时,将调用didSelectRow
如果不能解决问题,最好考虑写入
https://stackoverflow.com/questions/52019149
复制相似问题