我正在尝试在我的应用中实现拖放功能,并且遇到了我的mouseUp事件未触发的问题。如果我只是在我的视图上单击并释放它就会触发它,但如果我拖动,我的鼠标会拖动 事件发生了,就是这样。
通过尝试不同的事情,我发现问题出在我的dragImage调用中,但我现在还不知道如何解决它。
这是我的代码:
-(void) mouseDragged:(NSEvent *)theEvent
{
isDragging = YES;
if ([selectedCellRowIndex longValue] >= 0)
{
NSImage *im = [[NSImage alloc]initWithContentsOfFile:@"/Users/UserName/Desktop/drag.png"];
NSSize dragOffset = NSMakeSize(0.0, 0.0);
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard declareTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:self];
[pboard setData:[im TIFFRepresentation] forType:NSTIFFPboardType];
[self dragImage:im
at:downPointRelativeToTable
offset:dragOffset
event:theEvent
pasteboard:pboard
source:self
slideBack:YES];
}
}
有谁知道我的问题在哪里?!谢谢!
答案 0 :(得分:2)
在您的代码段中,您获得了NSPasteboard
个实例,但未将数据复制到该实例。这是必需的,否则您的拖动将无法正常启动 - 这可能是您永远无法获得mouseUp:
事件的原因。
dragImage:at:offset:event:pasteboard:source:slideBack:
的文档声明
在调用此方法之前,您必须放置要传输的数据 在pboard上。为此,获取拖动粘贴板对象(NSDragPboard), 声明数据的类型,然后将数据放在 粘贴板。
答案 1 :(得分:1)
我用一个简单的NSView后代看到了这一点。在mouseDown上启动了拖动操作,并且从未触发mouseUp。相反,在拖动操作完成之前,对超级的调用被阻塞(显然是本地运行循环)。因此,我必须在从super。
返回的调用之后将mouseUp处理放在mouseDown函数中