NSPasteBoard通过DragAndDrop从Dock中的下载(网格视图)获取文件到App Statusbar Icon

时间:2013-08-30 14:01:42

标签: macos cocoa nspasteboard

我在我正在处理的可可应用程序中实现了拖放功能。 当我将文件,文件夹或桌面或硬盘驱动器上的任何特定位置拖放到我的应用程序的状态栏图标时,应用程序会适当地检测到它,我可以使用该文件而不会出现任何问题一点都不

我遇到的问题是,如果我单击Dock中的“下载”图标(它在网格视图中打开)并从那里选择一个文件并将其拖放到状态栏,然后应用程序就不会检测到它一点都不在这种情况下甚至不会调用“performDragOperation”。我认为这是因为下载网格不是特定的位置,而是表示桌面上显示的下载文件夹。

这是我注册Drag类型的地方:

- (id)initWithStatusItem:(NSStatusItem *)statusItem {
CGFloat itemWidth = [statusItem length];
CGFloat itemHeight = [[NSStatusBar systemStatusBar] thickness];
NSRect itemRect = NSMakeRect(0.0, 0.0, itemWidth, itemHeight);
self = [super initWithFrame:itemRect];

if (self != nil) {
    _statusItem = statusItem;
    _statusItem.view = self;
}

NSArray *dragTypes = [NSArray arrayWithObjects:NSFilenamesPboardType, NSURLPboardType, nil];
[self registerForDraggedTypes:dragTypes];

return self; 

}

这是draggingEntered方法:

- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender {
ApplicationDelegate *appdelegate = (ApplicationDelegate *)[[NSApplication sharedApplication] delegate];

if (!appdelegate.isApplicationLoggedIn) {
    return NSDragOperationNone;
}

if ([sender draggingSourceOperationMask] & NSDragOperationCopy) {
    return NSDragOperationCopy;
}

if ([[sender draggingPasteboard] availableTypeFromArray:[NSArray arrayWithObjects:NSFilenamesPboardType, NSURLPboardType, nil]]) {
    return NSDragOperationCopy;
}

return NSDragOperationNone;

}

任何帮助将不胜感激。 谢谢。

0 个答案:

没有答案