Подтвердить что ты не робот

Перетаскивать файлы в NSTableView?

У меня есть NSTableView, который я хочу разрешить пользователям перетаскивать видео файлы. Когда они отбрасывают файл, он будет добавлен как строка в виде таблицы.

Как мне это сделать? В настоящее время tableview берет свои данные из Array Controller (который берет свои данные из NSMutableArray)

Я нашел эту документацию, но не могу заставить ее работать.

У меня есть..

  • создал класс "TableCon" (который я изменил для наследования из NSTableView, а не NSObject)
  • изменил класс NSTableView на TableCon
  • установите для этого класса выход делегата NSTableView
  • называется registerForDraggedTypes в TableCon init
  • реализован - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender; (снова в TableCon)

.. но, ничего, он действует, как будто я ничего не менял (без ошибок), что я делаю неправильно?

Изменить: Я попытался реализовать предложение Boaz Stuller, а также нашел это описание решения (первый ответ включает решение для первого сообщения). Так что я сделал сейчас...

  • Подкласс NSArrayController, который передает содержимое в представление таблицы (TableListCon)
  • Добавить tableView выход в TableListCon (и указал его на NSTableView)
  • Внедрить validateDrop, writeRowsWithIndexes и acceptDrop в TableListCon
  • Вызывается registerForDraggedTypes на выходе tableView.

Опять же, никаких ошибок/предупреждений, но только метод awakeFromNib, кажется, вызывается (ни один из других методов не вызывается)

4b9b3361

Ответ 1

NSTableView обрабатывает drag-and-drop по-разному от общих представлений, что в целом хорошо. Это означает, что вам не нужно вручную обрабатывать сложные выделения, отслеживать ячейки и поведение вставки, которые требуются таблицам.

Описание того, что требуется, можно найти здесь. В принципе, вы по-прежнему вызываете -registerDraggedTypes: (как правило, в методе -awakeFromNib), но вместо реализации методов NSDraggingDestination вы реализуете различные методы источника данных, связанные с перетаскиванием, которые можно найти . Вам не нужно подклассифицировать NSTableView для реализации drag-and-drop таким образом.

Обратите внимание, что это методы источника данных. Вам нужно подключить вывод данных TableSource к классу, который реализует эти методы для их вызова.

Ответ 2

В дополнение к тому, что сказал Вооз, похоже, что вы создаете подкласс NSTableView, а затем делаете экземпляр этого подкласса делегатом NSTableView. Если вы перейдете к подклассу, этот подкласс должен использоваться вместо NSTableView, а не в дополнение к нему. Кроме того, это почти всегда является нарушением озабоченности, чтобы иметь представление для делегата для другого объекта.