删除IKImageBrowserView的拖放行为

时间:2010-06-13 17:18:59

标签: cocoa drag-and-drop finder ikimagebrowserview

默认情况下(看起来),IKImageBrowserView可以拖放到Finder中的位置。我想关闭这种行为但不确定如何这样做。我在想,也许实现NSDraggingDestination协议并覆盖它可以解决这个问题,但到目前为止它对我没用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

如果要自定义IKImageBrowserView的拖放行为,可以在浏览器的数据源对象中实现- (NSUInteger) imageBrowser:(IKImageBrowserView *) aBrowser writeItemsAtIndexes:(NSIndexSet *) itemIndexes toPasteboard:(NSPasteboard *)pasteboard方法。这将允许您在执行拖动时定义要在粘贴板上放置的类型和数据。如果要完全禁用拖动,则应该只能返回0(要拖动的项目数)。

答案 1 :(得分:1)

如果您要定位Lion,则可以继承IKImageBrowserView并覆盖draggingSession:sourceOperationMaskForDraggingContext: 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;
    }
}
相关问题