正如标题所说.在单个UITableView中重新排序是微不足道的,但iPad的屏幕足够大,可以同时显示多个UITableView.所以似乎应该有一种方法可以在两个UITableViews之间拖放UITableViewCell.有关最佳方法的任何想法?
我的解决方案是使用自定义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
获取放置目标的确切视图.
cancelsTouchesInView
如果您希望在表视图中正常发生其他UI操作,请确保在手势识别器中禁用.