在iOS 11上,通过拖放将一个UITableView行移动到另一个索引路径非常容易。但我找不到通过拖放移动多行的方法。我实现了所有需要的委托方法,但UITableView视图仍然不会为多行拖放打开间隙,并且tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator)
从未被调用。
下面是我对UITableViewDropDelegate
和UITableViewDragDelegate
的实现。
func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
let itemProvider = NSItemProvider(item: nil, typeIdentifier: nil)
let dragItem = UIDragItem(itemProvider: itemProvider)
return [dragItem]
}
func tableView(_ tableView: UITableView, itemsForAddingTo session: UIDragSession, at indexPath: IndexPath, point: CGPoint) -> [UIDragItem] {
let itemProvider = NSItemProvider(item: nil, typeIdentifier: nil)
let dragItem = UIDragItem(itemProvider: itemProvider)
return [dragItem]
}
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) {
...
}
启用拖放,同时设置代理。
tableView.dragDelegate = self
tableView.dropDelegate = self
tableView.dragInteractionEnabled = true
1条答案
按热度按时间4xrmg8kj1#
我可以通过一些技巧使它工作。诀窍是记住行选择,但不实际选择行。下面是我在didSelectRow委托回调中所做的:
selectedItems是一个全局IndexPath数组,其中包含一些帮助器方法。
现在在itemsForBeginning调用中,我有以下代码:
在performDropWith中,我得到了以下内容:
一切都按预期工作。唯一令人讨厌的部分是,拖动动作正确显示计数,但只动画启动拖动的行,而不是所有行。