Удалить поведение перетаскивания IKImageBrowserView - PullRequest
4 голосов
/ 13 июня 2010

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

Ответы [ 2 ]

6 голосов
/ 14 июня 2010

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

1 голос
/ 16 декабря 2011

Если вы нацелены на Lion, вы можете создать подкласс IKImageBrowserView и переопределить метод *1004* протокола draggingSession:sourceOperationMaskForDraggingContext: . Чтобы предотвратить перетаскивание за пределы вашего приложения, просто верните 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;
    }
}

...