title: Is it possible to use iOS 11 Drag and Drop to reorder multiple items/cells at a time in UITableView?
body: <p>I know it's possible to reorder a single item/cell at a time when using the new <code>UITableViewDropDelegate</code> and <code>UITableViewDragDelegate</code> delegates but is it possible to support handling multiple.</p>
  
  <p>For example in this screenshot I am holding a single item:
  <a href="https://i.stack.imgur.com/lWJ1q.png" rel="noreferrer"><img src="https://i.stack.imgur.com/lWJ1q.png" alt="Dragging a single item/cell"></a></p>
  
  <p>And dropping the cell puts it in to place. </p>
  
  <p>However when I grab multiple cells I get the no entry sign and the cells wont reorder:
  <a href="https://i.stack.imgur.com/4q4eM.png" rel="noreferrer"><img src="https://i.stack.imgur.com/4q4eM.png" alt="Multiple selection Drag and Drop with no entry sign"></a></p>
  
  <p>If I multiple items from another app it works fine, for example dragging multiple messages out of iMessage:
  <a href="https://i.stack.imgur.com/r4wtU.png" rel="noreferrer"><img src="https://i.stack.imgur.com/r4wtU.png" alt="Multiple selection Drag and Drop from iMessage"></a></p>
  
  <p>Is it possible to do this when reordering a table view with only local items so that you can reorder quicker?</p>
  
  <p>Here is my code:</p>
  
  <p><code>UITableViewDragDelegate</code></p>
  
  <pre><code>extension DotViewController: UITableViewDragDelegate {
      func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -&gt; [UIDragItem] {
          return [getDragItem(forIndexPath: indexPath)]
      }
  
      func tableView(_ tableView: UITableView, itemsForAddingTo session: UIDragSession, at indexPath: IndexPath, point: CGPoint) -&gt; [UIDragItem] {
          return [getDragItem(forIndexPath: indexPath)]
      }
  
      func getDragItem(forIndexPath indexPath: IndexPath) -&gt; UIDragItem {
          // gets the item
      }
  }
  </code></pre>
  
  <p><code>UITableViewDropDelegate</code></p>
  
  <pre><code>extension DotViewController: UITableViewDropDelegate {
      func tableView(_ tableView: UITableView, canHandle session: UIDropSession) -&gt; Bool {
          return true
      }
  
      func tableView(_ tableView: UITableView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -&gt; UITableViewDropProposal {
          return UITableViewDropProposal(operation: .move, intent: .insertAtDestinationIndexPath)
      }
  
      func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator) {
          // Handles Drop
      }
  }
  </code></pre>
  
  <p><code>viewDidLoad</code></p>
  
  <pre><code>override func viewDidLoad() {
      super.viewDidLoad()
  
      tableView.dataSource = self
      tableView.delegate = self
      tableView.dragDelegate = self
      tableView.dropDelegate = self
  
      tableView.dragInteractionEnabled = true
  }
  </code></pre>