是否有可能使用iOS 11的拖放来重新sorting多个项目/单元格在UITableView?

我知道当使用新的UITableViewDropDelegateUITableViewDragDelegate委托时,可以重新sorting单个项目/单元,但是可以支持处理多个项目/单元。

例如,在这个截图中,我持有一个单一的项目: 拖动单个项目/单元格

然后放下细胞放置。

但是,当我抓住多个单元格时,我得到了没有进入的迹象,单元格不会重新sorting: 多重选择拖放没有输入符号

如果我从另一个应用程序的多个项目,它工作正常,例如从iMessage拖出多个消息: 从iMessage拖放多个选项

是否有可能做到这一点,当只有本地项目重新sorting表视图,以便您可以更快地重新sorting?

这是我的代码:

UITableViewDragDelegate

 extension DotViewController: UITableViewDragDelegate { func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] { return [getDragItem(forIndexPath: indexPath)] } func tableView(_ tableView: UITableView, itemsForAddingTo session: UIDragSession, at indexPath: IndexPath, point: CGPoint) -> [UIDragItem] { return [getDragItem(forIndexPath: indexPath)] } func getDragItem(forIndexPath indexPath: IndexPath) -> UIDragItem { // gets the item } } 

UITableViewDropDelegate

 extension DotViewController: UITableViewDropDelegate { func tableView(_ tableView: UITableView, canHandle session: UIDropSession) -> Bool { return true } func tableView(_ tableView: UITableView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -> UITableViewDropProposal { return UITableViewDropProposal(operation: .move, intent: .insertAtDestinationIndexPath) } func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator) { // Handles Drop } } 

viewDidLoad

 override func viewDidLoad() { super.viewDidLoad() tableView.dataSource = self tableView.delegate = self tableView.dragDelegate = self tableView.dropDelegate = self tableView.dragInteractionEnabled = true } 

可以通过拖拽委托(例如一个section.row的数组)来提供对所有选定单元格的引用,然后实现tableView:performDropWith:withCoordinator对它们进行重新sorting,从而完成多行重新sorting。 (我怀疑你知道这一点)

如果您想通过返回UITableViewDropProposal(操作:.move,intent:.insertAtDestinationIndexPath)的放置提案来支持重新sorting,那么UIKit使用iOS 11以前的tableView:moveRowAt:to函数,那么这只支持单行。

表视图moveRowAt IndexPath到IndexPath。 你可以继续实现这个,如果你喜欢,使用拖放来支持重新sorting。 因为表视图实际上是要调用这个函数,而不是通过协调器执行drop来调用,如果你已经返回了这个magic drop提议,并且单个行实际上被重新sorting。

来源: https : //developer.apple.com/videos/play/wwdc2017/223/?time = 1836