【问题标题】:Drag and drop between two tables in ipad在 ipad 中的两个表格之间拖放
【发布时间】:2010-10-12 12:06:23
【问题描述】:

我的 iPad 应用程序中有两个 UITableView。 我想将一个单元格从一个 tableview 拖放到另一个 tableview 上。 请建议我如何在 iPad 中的两个表格之间实现拖放?

提前致谢

【问题讨论】:

标签: uitableview


【解决方案1】:

我之前已经为此实现了a solution

方法

  • 解决方案的主要组件是监听拖放事件并将它们广播给委托的类;我将此组件称为gesture coordinator。它处理从UIGestureRecognizer 发出的事件以计算“拖放”状态并通知委托。
  • 例如,充当其委托的视图控制器将接收有关何时在集合之间交换项目的消息,然后更新其集合视图和数据源。
  • 手势协调器本质上只是UIGestureRecognizer 的拖放装饰器。

手势协调器逻辑

以下是我在实现手势协调器时考虑的建议:

  • 集合是包含子项和子项数组的视图。
  • 拖动区域由一个超级视图和一组有序集合组成,这些集合作为该超级视图中的子视图存在。
  • 拖动区域中集合的顺序决定了它们的拖放优先级。也就是说,如果一个集合位于 Drag arena 的有序集合集合的开头,则该集合上发生的拖放操作将被识别为该集合中任何后续集合的位置。
  • 当且仅当手势是在拖动区域中集合的可拖动项的范围内开始时,才会开始拖动。 当且仅当开始拖动后,手势的位置在拖动区域内发生变化时,才会发生拖动。
  • 当且仅当在拖动手势后立即停止、取消或完成时,拖动停止。
  • 当且仅当拖动停止在指定为可删除的点时才会发生删除。例如,用户可以将拖动区域内的某些边界指定为“放置时删除”区域。
  • 当且仅当拖动停止在它开始的集合的边界内、在该集合中指定为可重新排列的不同项目上以及在拖动区域中未指定的点上时才会发生重新排列可删除。
  • 当且仅当拖动停止在拖动区域中的另一个集合的边界内、在该集合中指定为可放置的特定项目或点上以及拖动区域中不可放置的点上时才会发生放置指定为可删除。

参考文献

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • @ham-sandwich,好的。我会留出一些时间在这个答案中包含更多细节。
【解决方案2】:

一旦你触摸了一个表格中的一行。你必须创建一个你想要拖动的行的图像

这可以通过编辑 didSelectRowAtIndexPath 函数来完成,您可以从中实际确定选择了哪一行。

然后随着您的拖动移动该图像(通过 touches:Moved 的自定义实现)

CGPoint 手势点 = [touch locationInView:self.view];

imageview.centre = 手势点;

【讨论】:

【解决方案3】:

现在你可以通过 iOS11 的 UITableView 的 dragDelegate 和 dropDelegate 来实现这个帮助

【讨论】:

  • 有例子吗?
【解决方案4】:

几个步骤:

  1. 添加长按手势识别器,当检测到时,从您按下的单元格中获取 UIImage。
  2. 从 tableview 中删除单元格 (deleteRowsAtIndexPaths:withRowAnimation:)。通过您从步骤 1 中获得的 UIImage 创建了一个 UIImageView。在您移动手指的同时移动 UIImageView。
  3. 手势结束时,决定要删除的tableview和要插入的位置。然后将选中的数据添加到数据源(insertRowsAtIndexPaths:withRowAnimation:)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多