5

我正在测试 NSView 中的拖放,但从draggingEntered:未被调用。

代码:

#import <Cocoa/Cocoa.h>
@interface testViewDrag : NSView <NSDraggingDestination>
@end

@implementation testViewDrag
- (id)initWithFrame:(NSRect)frame
{
   self = [super initWithFrame:frame];
   if (self)
{
    [self registerForDraggedTypes:[NSImage imagePasteboardTypes]];
    NSLog(@"initWithFrame");
}
return self;
}

-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
NSLog(@"draggingEntered");
return NSDragOperationEvery;
}

-(NSDragOperation) draggingUpdated:(id<NSDraggingInfo>)sender
{
  NSLog(@"draggingUpdated");
  return NSDragOperationEvery;
}
@end

在界面生成器中,我将subView(类设置为testViewDrag)添加到主窗口。在日志中我可以看到initWithFrame日志,但是当我拖动时,日志中没有显示任何内容。

我错过了什么?

4

1 回答 1

9

“要接收拖动操作,您必须通过向对象发送 registerForDraggedTypes: 消息来注册窗口或视图将接受的粘贴板类型,该消息在 NSWindow 和 NSView 中定义,并实现 NSDraggingDestination 协议中的几种方法。在拖动会话期间,一个只有当目的地注册了与被拖动的粘贴板数据类型匹配的粘贴板类型时,候选目的地才会收到 NSDraggingDestination 消息。目的地在图像进入时接收这些消息,在内部移动,然后退出或在目的地边界内释放。” 您可以在此处阅读有关拖放编程主题的更多信息。在我看来,您的问题在于您在registerForDraggedTypes:方法中定义的参数。

尝试用这个替换它:

[self registerForDraggedTypes:[NSArray arrayWithObjects:
        NSColorPboardType, NSFilenamesPboardType, nil]];

希望这可以帮助!

于 2012-11-12T12:40:10.350 回答