В MacOS 10.7 было добавлено несколько новых протоколов для реализации этого.
В настоящее время отсутствует документация для таблиц , но вы можете найти несколько хороших примеров:
Для NSTableViwew протокол NSTableViewDataSource определяет следующие методы:
(BOOL)tableView:writeRowsWithIndexes:toPasteboard:
tableView:validateDrop:proposedRow:proposedDropOperation:
tableView:acceptDrop:row:dropOperation:
Для NSOutlineView Протокол NSOutlineViewDataSource определяет следующие методы:
(BOOL)outlineView:writeItems:toPasteboard:
(NSDragOperation)outlineView:validateDrop:proposedItem:proposedChildIndex:
(BOOL)outlineView:acceptDrop:item:childIndex:
Это минимальные требования для реализации для каждого типа представления.
Варианты использования очень похожи.
- Если метод toPasteboard: возвращает YES, перетаскивание начинается.
- validateDrop: метод контролирует, какой целевой узел разрешен, путем обновления маркера в представлении
- Возвращать YES для метода acceptDrop: если удаление прошло успешно
Это приводит к двум дополнительным случаям, которыми вы должны управлять. Первый - это перетаскивание в одном и том же виде или одна и та же операция между двумя представлениями. Кроме того, вы можете различать операции перемещения, копирования или удаления. Хорошим примером является то, как точки останова работают с перетаскиванием в Xcode.
В TableView есть несколько дополнительных методов для настройки перетаскивания, но те, которые я упомянул, являются ключевыми методами для его работы.