0

我有一个 NBox 的子类,我想在一个名为 dragBox 的画布上拖动它。我不明白为什么以下代码没有触发 draggingEntered 。我得到了一张漂亮的后退图像,但没有一个目的地代表被解雇。为什么?

-(void) awakeFromNib
{
  [[self superview] registerForDraggedTypes:[NSArray     arrayWithObject:NSFilenamesPboardType]];


}
-(void) mouseDown:(NSEvent *)theEvent
{
   [self dragImage:[[NSImage alloc] initWithContentsOfFile:@"/Users/bruce/Desktop/Untitled-1.png"] at:NSMakePoint(32, 32)  offset:NSMakeSize(0,0) event:theEvent pasteboard:[NSPasteboard pasteboardWithName:NSDragPboard] source:self slideBack:YES];




}
-(NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender // validate
{
NSLog(@"Updated");
return [sender draggingSourceOperationMask];

}

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
NSLog(@"Drag Entered");

return [sender draggingSourceOperationMask];

}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {

 NSLog(@"Move Box");
[self setFrameOrigin:[sender draggingLocation]];


    return YES;
}

-(BOOL) prepareForDragOperation:(id<NSDraggingInfo>)sender
{NSLog(@"Prepared");
return YES;

}
4

2 回答 2

0

解决了!

我将 NSBox 用作目标和源。在这种情况下,事件并没有被触发。我将 registerDragTypes 移到了超级视图、画布上,并在那里实现了 draggingEntered 和 performDrag。它现在工作...

布鲁斯

于 2013-05-30T10:15:39.887 回答
0

在您的mouseDown方法中,在启动拖动操作之前,您不会在粘贴板中放置任何内容。NSView的文档指出您需要在将数据发送到该消息之前将其添加到粘贴板上。

无论您拥有或应该注册某种拖动类型的目标视图。如果您的粘贴板没有该类型的任何匹配数据,则目的地不会触发任何 NSDraggingProtocol 消息。

于 2013-05-30T01:49:48.620 回答