我在我正在开发的可可应用程序中实现了拖放功能。当我从文件夹或桌面或硬盘驱动器上的任何特定位置将文件拖放到我的应用程序的状态栏图标上时,应用程序会适当地检测到它,我可以毫无问题地使用该文件一点也不。
我遇到的问题是,如果我单击 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;
}
任何帮助,将不胜感激。谢谢你。