正如标题所说。在单个UITableView中重新排序是微不足道的,但iPad的屏幕足够大,可以同时显示多个UITableView。所以似乎应该有一种方法可以在两个UITableViews之间拖放UITableViewCell。有关最佳方法的任何想法吗?
答案 0 :(得分:11)
我的解决方案是使用自定义UIGestureRecognizer
来跟踪触摸事件,并使用单独的视图来绘制拖动操作。
这是有效的,因为UIGestureRecognizer
不会阻止响应者链。
来自UIGestureRecognizer
文档:
UIGestureRecognizer对象不在响应者链中,但是观察对其视图和视图的子视图进行了热门测试。
创建一个自定义UIViewController
(DragAndDropViewController)并将其视图添加到您想要拖动视图的视图的父视图中。使用自定义手势识别器类将触摸信息转发到DragAndDropViewController。
源告诉您的DragAndDropViewController拖动源自哪里(以及任何自定义信息)。控制器还应具有对放置目标的委托引用。发生丢弃时,向代理发送UITouch事件(根据Apple不推荐,但需要UITouch对象才能在目标视图中获取正确的位置)。
这就是我的DragAndDropViewController的样子:
@protocol DragAndDropDestination
- (void)droppedItem:(NSDictionary *)item withTouch:(UITouch *)touch;
@end
@interface DragAndDropViewController : UIViewController
{
id _dropDestination;
NSDictionary *_draggedItem;
UIImageView *_icon;
}
@property (nonatomic, assign) id dropDestination;
@property (nonatomic, retain) NSDictionary *draggedItem;
// Source sends this message
- (void)startDraggingWithItem:(NSDictionary *)item;
@end
目的地收到消息后,您可以使用- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
获取放置目的地的确切视图。
如果您希望在表格视图中正常进行其他UI操作,请确保在手势识别器中禁用cancelsTouchesInView
。