swift2 UITableView单元格重新排序拖动操作意外停止

bvhaajcl  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(233)

我正在尝试找出如何调试以下场景,以了解UITableView单元格无法重新排序的原因。
1.触摸“Edit”(编辑)菜单项,将表格视图置于编辑模式。
1.编辑模式适用于删除单元格。
1.尝试通过触摸并拖动单元格上的重新排序控件来重新排序单元格。
1.单元格轮廓在拖动方向上移动了几个像素,但随后又迅速恢复到原来的位置,即使我的手指仍在屏幕上拖动。
在代码中:

  • 可用视图委托:targetIndexPathForMoveFromRowAtIndexPath从未被调用。这似乎与单元格在到达另一个单元格之前捕捉回其原始位置的UI反馈一致。
  • 可用视图数据源:canMoveRowAtIndexPath会针对所有数据列传回true。
  • 可用视图数据源:一旦单元格恢复到其原始位置,并且sourceIndexPath和destinationIndexPath的值相同,就会调用moveRowAtIndexPath。-

相同的视图控制器代码和故事板可以正确地对另一个项目中的单元格进行重新排序。
我已经搜索了stackoverflow和谷歌一天,找不到任何参考是什么会导致一个单元格拖动事件被取消。
任何关于我如何调试这个问题的想法都将非常感谢!

4uqofj5v

4uqofj5v1#

我找到了答案,它与UITableView代码无关。
我的代码有一个以编程方式创建的根视图控制器,它处理滑动菜单面板的显示/隐藏。
此视图控制器的viewDidLoad()创建了一个panGestureRecognizer来跟踪滑动以显示/隐藏滑动菜单。此panGestureRecognizer不通过触摸进行传递。
添加以下代码修复了该问题:

panGestureRecognizer.cancelsTouchesInView = false
bkhjykvo

bkhjykvo2#

我也遇到了同样的问题,并发现在我的情况下,解决方案是在我的tableview单元格上添加各种滑动和点击手势,而不是添加到单元格本身,而是添加到单元格的contentView。
所以,与其这样,

cell.addGestureRecognizer(myGesture)

代码变为

cell.contentView.addGestureRecognizer(myGesture)

这似乎工作得很好,修复了OP的那种不稳定的滚动。也许有人可以从这个解决方案中受益,如果你的问题更像是我的问题,而不是OP的问题。
有关该解决方案的详细讨论,请访问:Add a gestureRecognizer to a tableView cell

相关问题