是否有可能使用iOS 11的拖放来重新sorting多个项目/单元格在UITableView?
我知道当使用新的UITableViewDropDelegate
和UITableViewDragDelegate
委托时,可以重新sorting单个项目/单元,但是可以支持处理多个项目/单元。
例如,在这个截图中,我持有一个单一的项目:
然后放下细胞放置。
但是,当我抓住多个单元格时,我得到了没有进入的迹象,单元格不会重新sorting:
如果我从另一个应用程序的多个项目,它工作正常,例如从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