【问题标题】:UITableView cell reordering drag action unexpectedly stopsUITableView 单元格重新排序拖动操作意外停止
【发布时间】:2016-08-25 17:06:54
【问题描述】:

我试图弄清楚如何调试以下场景以了解 UITableView 单元格不会重新排序的原因。

  1. 触摸“编辑”菜单项,将表格视图置于编辑模式。
  2. 编辑模式适用于删除单元格。
  3. 尝试通过触摸并拖动单元格上的重新排序控件来重新排序单元格。
  4. 单元格轮廓在拖动方向上移动了几个像素,然后即使我的手指仍在屏幕上拖动,也会迅速回到原来的位置。

在代码中:

  • UITableViewDelegate:targetIndexPathForMoveFromRowAtIndexPath 永远不会被调用。这似乎与单元格在到达另一个单元格顶部之前迅速回到其原始位置的 UI 反馈一致。
  • UITableViewDataSource:canMoveRowAtIndexPath 为所有行返回 true。
  • UITableViewDataSource:moveRowAtIndexPath 总是在单元格回到其原始位置时被调用,并且 sourceIndexPath 和destinationIndexPath 值相同。 -

相同的视图控制器代码和情节提要在另一个项目中重新排序单元格时正常工作。

我已经在 stackoverflow 和 Google 上搜索了一天,但找不到任何关于导致单元格拖动事件取消的参考。

任何关于如何调试此问题的想法将不胜感激!

【问题讨论】:

  • 需要更多 TableViewController 代码

标签: ios iphone swift uitableview swift2


【解决方案1】:

我找到了答案,和UITableView代码无关。

我的代码有一个以编程方式创建的根视图控制器,用于处理显示/隐藏滑动菜单面板。

此视图控制器的 viewDidLoad() 创建一个 panGestureRecognizer 来跟踪滑动以显示/隐藏滑动菜单。这个 panGestureRecognizer 没有通过触摸。

添加此代码解决了问题:

panGestureRecognizer.cancelsTouchesInView = false

【讨论】:

    【解决方案2】:

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

    所以,而不是这个,

    cell.addGestureRecognizer(myGesture)
    

    代码变成

    cell.contentView.addGestureRecognizer(myGesture)
    

    这似乎运作良好,修复了与 OP 相同的那种古怪的滚动。如果您的问题更像我遇到的问题而不是 OP 遇到的问题,也许有人可以从这个解决方案中受益。

    更多关于解决方案的讨论可以在这里找到:Add a gestureRecognizer to a tableView cell

    【讨论】:

    • 嘿伙计,你救了我的命。
    • @TK189 感谢您提及它 - 知道答案很有帮助 我的一天,不仅仅是投票。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多