Drag and Drop

Support the direct manipulation of your app's content using drag and drop.


With very little programming on your part, custom view objects can be dragged and dropped anywhere. Objects become part of this dragging mechanism by conforming to dragging protocols: Draggable objects conform to the NSDraggingSource protocol, and destination objects (that is, receivers of a drop) conform to the NSDraggingDestination protocol. AppKit hides all the details of tracking the cursor and displaying the dragged image.


Drag Sources

Originate content from a drag source by creating items to represent that content.


A set of methods that are implemented by the source object in a dragging session.


A single dragged item within a dragging session.


The encapsulation of a drag-and-drop action that supports modification of the drag while in progress.


A single object in a dragging item.

Drop Targets

Receive dragged content in your app's objects.


A set of methods that the destination object (or recipient) of a dragged image must implement.


A set of methods that supply information about a dragging session.


A set of methods that the destination object (or recipient) of a dragged object can implement to support spring-loading.

See Also

User Interface

Views and Controls

Present and define the interactions for your content onscreen.

View Management

Manage your user interface, including the size and position of views in a window.

Menus, Cursors, and the Dock

Implement menus and cursors to facilitate interactions with your app, and use your app's Dock tile to convey updated information.

Windows, Panels, and Screens

Organize your view hierarchies and facilitate their display onscreen.


Make your app more accessible to users with disabilities.

Touch Bar

Display interactive content and controls in the Touch Bar.


Animate your views and other content to create a more engaging experience for users.

Sound, Speech, and Haptics

Play sounds and haptic feedback, and incorporate speech recognition and synthesis into your interface.