问题 有没有一种简单的方法可以在两个UITableViews之间拖放UITableViewCell?


正如标题所说。在单个UITableView中重新排序是微不足道的,但iPad的屏幕足够大,可以同时显示多个UITableView。所以似乎应该有一种方法可以在两个UITableViews之间拖放UITableViewCell。有关最佳方法的任何想法?


4328
2018-03-26 19:18


起源

不确定,但这个想法让我开始做一些测试。 :)可能需要一些自定义表视图子类。 - gnasher
如果您偶然发现一个好的解决方案,请分享您的结果!我还没有发现任何足够干净的东西。 - Steve Simitzis


答案:


我的解决方案是使用自定义 UIGestureRecognizer 用于跟踪触摸事件,以及用于绘制拖动操作的单独视图。

这是因为 UIGestureRecognizer 不会阻止响应者链。 来自 UIGestureRecognizer 文档:

UIGestureRecognizer对象不在响应者链中,但观察对其视图及其视图的子视图进行了热门测试。

创建自定义 UIViewController (DragAndDropViewController)并将其视图添加到要进行拖放操作的视图的父视图中。使用自定义手势识别器类将触摸信息转发到DragAndDropViewController。

源告诉您的DragAndDropViewController拖动源自何处(以及任何自定义信息)。控制器还应具有对放置目标的委托引用。发生丢弃时,向代理发送UITouch事件(根据Apple不推荐,但需要UITouch对象才能在目标视图中获取正确的位置)。

这就是我的DragAndDropViewController的样子:

@protocol DragAndDropDestination

  • (void)droppedItem:(NSDictionary *)item withTouch:(UITouch *)touch;

@结束

@interface DragAndDropViewController:UIViewController {     id _dropDestination;     NSDictionary * _draggedItem;     UIImageView * _icon; }

@property(nonatomic,assign)id dropDestination; @property(nonatomic,retain)NSDictionary * draggedItem;

// Source发送此消息 - (void)startDraggingWithItem:(NSDictionary *)item;

@结束


11
2018-05-07 13:50