Перетаскивание мест назначения
Для получения перетаскивают операции, необходимо зарегистрировать типы области монтажа, которые окно или представление примут путем отправки объекта a registerForDraggedTypes:
сообщение, определенное и в NSWindow и в NSView и реализации несколько методов из протокола NSDraggingDestination. Во время сеанса перетаскивания место назначения кандидата получает сообщения NSDraggingDestination, только если место назначения регистрируется для типа области монтажа, соответствующего тип перетаскиваемых данных области монтажа. Место назначения получает эти сообщения, поскольку изображение входит, перемещается внутри, и затем выходит или выпущено в границах места назначения.
Несмотря на то, что NSDraggingDestination объявляется как неофициальный протокол, NSWindow и подклассы NSView, Вы создаете для принятия потребности протокола только реализовать те методы, которые являются подходящими. (NSWindow и классы NSView обеспечивают частные реализации для всех методов.) Или объект окна или его делегат могут реализовать эти методы; однако, если существуют реализации в обоих местах, реализация делегата имеет приоритет.
Отправитель целевых сообщений
Каждое из спортивных состязаний методов NSDraggingDestination отдельный аргумент: отправитель, объект, вызвавший метод. В его реализациях методов NSDraggingDestination место назначения может отправить сообщения протокола NSDraggingInfo в отправителя для получения большей информации о текущем сеансе перетаскивания, таком как запросы для области монтажа перетаскивания или маски операций источника. В Java отправитель является объектом NSDragDestination, реализующим интерфейс NSDraggingInfo.
Область монтажа перетаскивания
Несмотря на то, что стандартная область монтажа перетаскивания (полученное использование [NSPasteboard pasteboardWithName:NSDragPboard]
) предоставлен как удобство в получении области монтажа для перетаскивания данных, нет НИКАКОЙ гарантии, что это будет областью монтажа, используемой в межпроцессном перетаскивании. Таким образом, для гарантии получения корректной области монтажа код должен использовать [sender draggingPasteboard]
.
Порядок целевых сообщений
Шесть методов NSDraggingDestination вызываются в ясном приказе:
Когда изображение перетаскивается в границы места назначения, место назначения отправляется a
draggingEntered:
сообщение. Метод должен возвратить значение, указывающее, который, перетаскивая работу выполнит место назначения.В то время как изображение остается в месте назначения, серии
draggingUpdated:
сообщения отправляются. Метод должен возвратить значение, указывающее, который, перетаскивая работу выполнит место назначения.Если изображение перетаскивается из места назначения,
draggingExited:
отправляется и последовательность остановок сообщений NSDraggingDestination. Если это повторно вступает, последовательность начинается снова (с новымdraggingEntered:
сообщение).Когда изображение выпущено, это любой слайды назад к его источнику (и повреждает последовательность), или a
prepareForDragOperation:
сообщение отправляется месту назначения, в зависимости от значения, возвращенного новым вызовомdraggingEntered:
илиdraggingUpdated:
.Если
prepareForDragOperation:
сообщение возвратилосьYES
, aperformDragOperation:
сообщение отправляется.Наконец, если
performDragOperation:
возвращенныйYES
,concludeDragOperation:
отправляется.