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

# UICollectionViewDragDelegate

The interface for initiating drags from a collection view.

```
@MainActor protocol UICollectionViewDragDelegate : NSObjectProtocol
```

## Overview

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

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

## Topics

### Providing the items to drag

[`collectionView(_:itemsForBeginning:at:)`](/documentation/UIKit/UICollectionViewDragDelegate/collectionView(_:itemsForBeginning:at:))

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

[`collectionView(_:itemsForAddingTo:at:point:)`](/documentation/UIKit/UICollectionViewDragDelegate/collectionView(_:itemsForAddingTo:at:point:))

Adds the specified items to an existing drag session.

### Tracking the drag session

[`collectionView(_:dragSessionWillBegin:)`](/documentation/UIKit/UICollectionViewDragDelegate/collectionView(_:dragSessionWillBegin:))

Notifies you that a drag session is about to begin for the collection view.

[`collectionView(_:dragSessionDidEnd:)`](/documentation/UIKit/UICollectionViewDragDelegate/collectionView(_:dragSessionDidEnd:))

Notifies you that a drag session ended for the collection view.

### Providing a custom preview

[`collectionView(_:dragPreviewParametersForItemAt:)`](/documentation/UIKit/UICollectionViewDragDelegate/collectionView(_:dragPreviewParametersForItemAt:))

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

### Controlling the drag session

[`collectionView(_:dragSessionAllowsMoveOperation:)`](/documentation/UIKit/UICollectionViewDragDelegate/collectionView(_:dragSessionAllowsMoveOperation:))

Returns a Boolean value that determines whether a move operation is allowed for a drag session.

[`collectionView(_:dragSessionIsRestrictedToDraggingApplication:)`](/documentation/UIKit/UICollectionViewDragDelegate/collectionView(_:dragSessionIsRestrictedToDraggingApplication:))

Returns a Boolean value that determines whether the source app and destination app must be the same for a drag session.



---

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)