【发布时间】:2012-03-21 00:42:57
【问题描述】:
我的应用程序允许拖动到主窗口和状态项。
- 如果我将一个文件从 Stacks 拖到我的窗口,它可以完美运行。
- 如果我将文件从 Finder 拖到我的窗口中,它可以完美运行。
- 如果我将文件从 Finder 拖到我的状态项,它可以完美运行。
- 如果我将文件从堆栈拖到我的状态项,它不起作用。
窗口和状态项都使用完全相同的拖放处理代码。
有趣的是,当一个文件从 Stacks 拖到状态项上时,光标会按预期改变,因为 - (NSDragOperation)draggingEntered:(id )sender { NSPasteboard *pboard; NSDragOperation sourceDragMask; 方法按预期调用。
然而,当文件被删除时,- (BOOL)performDragOperation:(id )sender { NSPasteboard *pboard; NSDragOperation sourceDragMask; 方法未被调用。
这里是第一种方法的实现:
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
NSPasteboard *pboard;
NSDragOperation sourceDragMask;
sourceDragMask = [sender draggingSourceOperationMask];
pboard = [sender draggingPasteboard];
if ( [[pboard types] containsObject:NSColorPboardType] ) {
if (sourceDragMask & NSDragOperationGeneric) {
return NSDragOperationGeneric;
}
}
if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
if (sourceDragMask & NSDragOperationLink) {
return NSDragOperationLink;
} else if (sourceDragMask & NSDragOperationCopy) {
return NSDragOperationCopy;
}
}
return NSDragOperationNone;
}
谢谢!
【问题讨论】:
标签: cocoa drag-and-drop nsstatusitem