我有一个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;
}发布于 2013-05-30 09:49:49
在mouseDown方法中,在启动拖动操作之前,不会在粘贴板中放置任何内容。NSView的documentation指出,在将数据发送到该邮件之前,您需要将数据添加到粘贴板上。
无论你的目标视图是什么,或者应该是什么,都注册了某种拖拽类型。如果您的粘贴板没有任何与该类型匹配的数据,则目的地将不会触发任何NSDraggingProtocol消息。
发布于 2013-05-30 18:15:40
解决了!
我使用NSBox作为目标和源。在这种情况下,事件并没有被触发。我将registerDragTypes移到了超级视图和画布上,并在那里实现了draggingEntered和performDrag。它现在起作用了..。
布鲁斯
https://stackoverflow.com/questions/16823647
复制相似问题