2010-06-13 4 views
4

По умолчанию (кажется) IKImageBrowserView позволяет перетаскивать объекты в Finder. Я хотел бы отключить это поведение, но не знаю, как это сделать. Я думал, что, возможно, реализация протокола NSDraggingDestination и его переопределение могут решить это, но пока это не сработало для меня.Удалить поведение перетаскивания IKImageBrowserView

Спасибо за помощь!

+0

Протокол 'NSDraggingDestination' - это именно то, что он говорит: это протокол для перетаскивания * адресата *. Внедрение или переопределение его в классе просмотра ничего не изменит о перетаскивании * from * it; когда пользователь делает это, представление является источником * drag *. –

ответ

6

Если вы хотите настроить поведение перетаскивания IKImageBrowserView, вы можете реализовать метод - (NSUInteger) imageBrowser:(IKImageBrowserView *) aBrowser writeItemsAtIndexes:(NSIndexSet *) itemIndexes toPasteboard:(NSPasteboard *)pasteboard в объекте источника данных вашего браузера. Это позволит вам определить, какие типы и данные вы хотите разместить на картоне при выполнении перетаскивания. Если вы хотите полностью отключить перетаскивание, вы сможете просто вернуть 0 (количество элементов, которые вы хотите перетащить).

1

Если вы нацеливаетесь на Lion, вы можете подкласса IKImageBrowserView и переопределить метод NSDraggingSource protocol. Чтобы предотвратить перетаскивание за пределы вашего приложения, просто верните NSDragOperationNone, если контекст NSDraggingContextOutsideApplication. В противном случае верните операции перетаскивания, которые вас интересуют. Таким образом вы можете запретить перетаскивание на рабочий стол, Finder и т. Д., Но все же разрешить перетаскивание в режиме просмотра изображений вашего приложения.

- (NSDragOperation)draggingSession:(NSDraggingSession *)session sourceOperationMaskForDraggingContext:(NSDraggingContext)context { 
    [super draggingSession:session sourceOperationMaskForDraggingContext:context]; 

    switch (context) { 
     case NSDraggingContextOutsideApplication: 
      return NSDragOperationNone; 
      break; 

     case NSDraggingContextWithinApplication: 
      return NSDragOperationAll; 
      break; 

     default: 
      return NSDragOperationAll; 
      break; 
    } 
} 
Смежные вопросы