2011-05-19 1 views
0

Я применил функцию перетаскивания в моем приложении. Все функциональные возможности хорошо, но когда мы перетащить изображение, чтобы NSTableView,Перетаскивание не работает для NSTableView

- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender 

метод не вызывался.

Может ли кто-нибудь сказать мне причину, почему этот метод не вызван?

Даже если я реализую этот также ...

- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender 

ответ

5

Нам нужно гораздо больше информации.

«... но когда мы перетащить изображение, чтобы NSTableView»

Что вы имеете в виду под „изображение“, и где (какое приложение) вы перетаскиванием это изображение от? Например, вы имеете в виду файл изображения (Picture.png) из Finder, который вы перетаскиваете в представление таблицы в своем приложении? Или из собственного приложения вы перетаскиваете какое-то изображение из одного места в свое табличное представление?

Это ваш собственный подкласс NSTableView? Потому что это единственное место, где вы увидите -performDragOperation: или -prepareForDragOperation:. По умолчанию NSTableView переопределяет эти примитивные методы NSDraggingDestination для реализации своих собственных методов, ориентированных на таблицу, таких как Bavarious (-tableView:validateDrop:proposedRow:proposedDropOperation:, -tableView:acceptDrop:row:dropOperation: и т. Д.). Если вы говорите о том, что эти методы не вызывается в NSTableView подкласса, то помните, что в документации говорится, для -prepareForDragOperation::

Этот метод вызывается только тогда, когда последнего draggingEntered: или draggingUpdated : сообщение возвращается значение приемлемых перетащить операции

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

Если, с другой стороны, вы не говорите о подклассе NSTableView, а о внешнем классе контроллера, то да, то performDragOperation: и prepareForDragOperation: не вызывают его. Другими словами, если у вас есть класс контроллера, скажем, MDAppController, он установлен как делегат и источник данных NSTableView, -performDragOperation: и prepareForDragOperation:MDAppController не будут вызываться. Эти методы предназначены для классов, основанных на NSView. По этой причине NSTableView имеет следующий метод, определенный в протоколе NSTableViewDataSource: tableView:validateDrop:proposedRow:proposedDropOperation:. Если вы реализуете это в своем классе контроллера, его следует вызывать, если вы правильно настроили tableView, и он был зарегистрирован для типов данных, которые вы хотите.

 Смежные вопросы

  • Нет связанных вопросов^_^