Какао NSOutlineView и перетаскивание - PullRequest
0 голосов
/ 20 мая 2010

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

Я прочитал другой пост здесь на Outlineviews и DND, но я не могу заставить мою программу работать. Внизу этого поста есть ссылка на zip моего проекта. Это очень простой, только обзор и кнопка. Я хочу, чтобы он получал на него текстовые файлы, но что-то не так с моим кодом или соединениями. Я попытался следовать примеру кода Apple их NSOutline Drag and Drop, но я что-то упустил. Одно отличие - моя программа основана на документах, а их пример - нет. Я установил владельца файла для получения действий делегата, поскольку именно там находится мой код для обработки перетаскивания, а также действие кнопки. Вероятно, это простая ошибка, так что, может, кто-нибудь посмотрит и скажет, что я делаю не так? Вот ссылка на файл: http://dl.dropbox.com/u/7195844/OutlineDragDrop1.zip

1 Ответ

8 голосов
/ 24 мая 2010

Вы не отвечаете на сообщение проверки перетаскивания NSOutlineView.

Ваш оригинальный код реализовано tableView:validateDrop:proposedRow:proposedChildIndex:. Как я указывал на этот вопрос, это неправильно, когда ваш табличный вид является контурным; NSOutlineView не будет отправлять сообщение проверки перетаскивания в виде таблицы, только сообщение проверки перетаскивания в виде схемы.

Вы с тех пор изменили свой метод проверки перетаскивания, чтобы он был объявлен следующим образом:

- (NSDragOperation)outlineView:(NSOutlineView*)view
                validateDrop:(id <NSDraggingInfo>)info
                 proposedRow:(int)row
          proposedChildIndex:(NSInteger)index

Но на самом деле ничто не отправляет такое сообщение.

Помните, что NSOutlineView редко имеет дело с индексами строк, поскольку они могут измениться, если родительские строки развернуты и свернуты. Вместо этого он имеет дело с «элементами», которые обычно являются модельными объектами.

Следовательно, правильный метод проверки:

- (NSDragOperation)outlineView:(NSOutlineView*)view
                validateDrop:(id <NSDraggingInfo>)info
                proposedItem:(id)item
          proposedChildIndex:(NSInteger)index

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

После применения этого изменения ваш источник данных проверяет сбросы.

...