Отработка драга&дропа в маке банальна по своей сути, если известно что делать ).
Рассмотрим случай когда досточно простого переноса/добавление файлов, папки, диска в программу. Бонусом идет, что если мы переносим эти объекты на пиктограмму не запущенной еще программы, то используется тот же механизм (к примеру есть известная программа iPhoto, в нее можно закидывать фотки как папками, кучей файлов, отдельным файлом, так и переносм на пиктограмму).
Первое что нам понадобится, это подправить немного info.plist
Information Property List -> добавляем Document types
В Document types -> Item -> Document OS Types
В Document OS Types ->
Item 0 = ****
Item 1 = fold (для папок и файлов)
Item 2 = disk (для дисков)
Можно выставить Role = Viewer.
Теперь добавим немного кода в класс-делегат (обычно это основной Controller к которому привязан View).
- - (NSDragOperation)draggingEntered:(id
)sender - {
- // в зависимости от типа операции перенос, добавление etc.
- // будет у нас при драге на объекте значок
- return NSDragOperationLink;
- }
- - (BOOL)prepareForDragOperation:(id
)sender - {
- return YES;
- }
- - (BOOL)performDragOperation:(id
)sender - {
- NSPasteboard *pboard;
- NSDragOperation sourceDragMask;
- sourceDragMask = [sender draggingSourceOperationMask];
- pboard = [sender draggingPasteboard];
- if ([[pboard types] containsObject:NSFilenamesPboardType])
- {
- NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
- // ... отрабатываем данные
- }
- return YES;
- }
Комментариев нет:
Отправить комментарий