Перетаскивание источников

Сеанс перетаскивания инициируется пользователем, щелкающим по мыши в окне или представлении и перемещающим мышь. NSView и NSWindow реализуют метод dragImage:at:offset:event:pasteboard:source:slideBack: обработать сеанс перетаскивания. Вы вызываете этот метод в mouseDown: или mouseDragged: метод Вашего подкласса NSView или NSWindow. Вы обеспечиваете изображение для отображения во время перетаскивания, область монтажа, содержащая данные и объект, действующий как «владелец» или источник перетаскивания, данных. Во время сеанса перетаскивания источник перетаскивания отправляется сообщения, определенные протоколом NSDraggingSource для выполнения любых необходимых действий, описанных ниже.

Перетащите операции

Только один из методов NSDraggingSource должен быть реализован: draggingSourceOperationMaskForLocal:. Этот метод объявляет, какие типы операций источник позволяет выполняться. Таблица 1 перечисляет доступные операции перетаскивания. (В Java константы определяются в пространстве имен NSDraggingInfo и недостают NS префикс.) Метод должен возвратить комбинацию битового «ИЛИ» позволенных типов или NSDragOperationNone если не позволяются никакие операции.

Таблица 1  Доступные операции перетаскивания

Перетаскивание работы

Значение

NSDragOperationCopy

Данные, представленные изображением, могут быть скопированы.

NSDragOperationLink

Данные могут быть совместно использованы.

NSDragOperationGeneric

Работа может быть определена местом назначения.

NSDragOperationPrivate

Работа согласовывается конфиденциально между источником и местом назначения.

NSDragOperationMove

Данные могут быть перемещены.

NSDragOperationDelete

Данные могут быть удалены.

NSDragOperationEvery

Все вышеупомянутые

NSDragOperationAll

Осуждаемый. Использовать NSDragOperationEvery вместо этого.

NSDragOperationNone

Никакие не перетаскивают операции, позволяются.

Позволенные операции могут отличаться, если перетаскивание происходит полностью в Вашем приложении или между Вашим приложением и другим. Флаг передал draggingSourceOperationMaskForLocal: указывает, является ли это локальной переменной, или внутренний, перетащить.

Пользователь может нажать модифицирующие клавиши для дальнейшего выбора который работа выполнить. Если управление, опция или командная клавиша нажимаются, маска работы источника отфильтрована, чтобы только содержать операции, данные в Таблице 2. Чтобы препятствовать тому, чтобы модификаторы изменили маску, Ваш источник перетаскивания должен реализовать ignoreModifierKeysWhileDragging и возвратитесь YES.

  Операции Table 2 Drag выбраны с модифицирующими клавишами

Модифицирующая клавиша

Перетаскивание работы

Управление

NSDragOperationLink

Опция

NSDragOperationCopy

Команда

NSDragOperationGeneric

Перетащите сообщения

В течение перетаскивания исходный объект отправляется ряд сообщений для уведомления его относительно состояния работы перетаскивания. В самом начале перетаскивания источник отправляется сообщение draggedImage:beganAt:. Каждый раз перетащенные перемещения изображения, источник отправляется a draggedImage:movedTo: сообщение. Наконец, когда пользователь отпустил кнопку мыши, и место назначения или выполнило работу отбрасывания или отклонило ее, источник отправляется a draggedImage:endedAt:operation: сообщение. Параметром работы является работа перетаскивания выполняемое место назначения или NSDragOperationNone если перетаскивание перестало работать. (В Java эти имена методов startedDraggingImage, movedDraggingImage, и finishedDraggingImage.)

Источник перетаскивания обычно не должен реализовывать ни один из этих методов. Если Вы собираетесь поддерживать NSDragOperationMove или NSDragOperationDelete операции, однако, действительно необходимо реализовать draggedImage:endedAt:operation: удалить перетащенные данные из источника. (Обратите внимание на то, что NSDragOperationDelete работу требуют при перетаскивании любого объекта к Значку корзины в прикреплении.)

Перетащенное изображение

Изображение, опозоренное сеанс перетаскивания, является просто изображением, представляющим данные по области монтажа. Несмотря на то, что место назначения перетаскивания может получить доступ к изображению, его первоочередная задача с данными области монтажа, которые изображение представляет — работа перетаскивания, которую в конечном счете выполняет место назначения, находится на данных области монтажа, не на самом изображении.

Когда сеанс перетаскивания запускается при помощи метода NSView dragFile:fromRect:slideBack:event:, NSView использует значок Finder файла для изображения. Для Ваших собственных перетаскиваний необходимо создать подходящее изображение. Возможности включают полупрозрачный снимок выведенных на экран данных, таких как выбранный раздел текста или символьное представление данных, таких как значок таблицы при перетаскивании данных электронной таблицы.