<!--
{
  "availability" : [
    "iOS: 11.0.0 -",
    "iPadOS: 11.0.0 -",
    "macCatalyst: 13.1.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "UIKit",
  "identifier" : "/documentation/UIKit/UITableViewDragDelegate",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "UIKit"
    ],
    "preciseIdentifier" : "c:objc(pl)UITableViewDragDelegate"
  },
  "title" : "UITableViewDragDelegate"
}
-->

# UITableViewDragDelegate

The interface for initiating drags from a table view.

```
@MainActor protocol UITableViewDragDelegate : NSObjectProtocol
```

## Overview

Implement this protocol in the object that you use to initiate drags from your table view. The only required method of this protocol is the [`tableView(_:itemsForBeginning:at:)`](/documentation/UIKit/UITableViewDragDelegate/tableView(_:itemsForBeginning:at:)) method, but you can implement other methods as needed to customize the drag behavior of your table view.

Assign your custom delegate object to the [`dragDelegate`](/documentation/UIKit/UITableView/dragDelegate) property of your table view.

## Topics

### Providing the items to drag

[`tableView(_:itemsForBeginning:at:)`](/documentation/UIKit/UITableViewDragDelegate/tableView(_:itemsForBeginning:at:))

Provides the initial set of items (if any) to drag.

[`tableView(_:itemsForAddingTo:at:point:)`](/documentation/UIKit/UITableViewDragDelegate/tableView(_:itemsForAddingTo:at:point:))

Adds the specified items to an existing drag session.

### Tracking the drag session

[`tableView(_:dragSessionWillBegin:)`](/documentation/UIKit/UITableViewDragDelegate/tableView(_:dragSessionWillBegin:))

Signals the start of a drag operation involving content from the specified table view.

[`tableView(_:dragSessionDidEnd:)`](/documentation/UIKit/UITableViewDragDelegate/tableView(_:dragSessionDidEnd:))

Signals the end of a drag operation involving content from the specified table view.

[`tableView(_:dragSessionIsRestrictedToDraggingApplication:)`](/documentation/UIKit/UITableViewDragDelegate/tableView(_:dragSessionIsRestrictedToDraggingApplication:))

Returns a Boolean value indicating whether the dragged content must be dropped in the same app.

[`tableView(_:dragSessionAllowsMoveOperation:)`](/documentation/UIKit/UITableViewDragDelegate/tableView(_:dragSessionAllowsMoveOperation:))

Returns a Boolean value indicating whether your app supports a move operation for the dragged content.

### Providing a custom preview

[`tableView(_:dragPreviewParametersForRowAt:)`](/documentation/UIKit/UITableViewDragDelegate/tableView(_:dragPreviewParametersForRowAt:))

Returns custom information about how to display the row at the specified location during the drag.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)