我有一个处理营销信息的简单应用程序。我做的是致电
NSInteger result = [openPanel runModalForDirectory:nil file:nil types:fileTypes];
当用户点击File->Open
菜单时。现在我被要求向应用程序添加拖放功能,以便用户可以将文件拖到它上,而不必转到菜单或按下命令+ o打开文件。
在您告诉我去阅读文档之前,我已经检查了Apple的Intro to drag and drop和其他文档。我仍然无法弄清楚该怎么做。
我是一个老的Unix C程序员,需要复制这个,Apple的文档中的一些假设对我来说没有意义。
简而言之,我需要将我的应用添加到:
作为一个注释,我一次只能处理一个文件。
感谢您的帮助
答案 0 :(得分:16)
嗯,你需要实现NSDraggingDestination协议,我认为你已经阅读过了。您可以在特定视图或整个窗口中实现它 - 听起来您正在接受应用程序级文件拖动,因此您可能希望整个窗口接受拖动。无论如何,一旦你开始工作,你将看到如何进一步定制它。
子类NSWindow。第一步是指定您感兴趣的拖拉类型。
告诉您的自定义窗口它对文件名感兴趣:
- (void)awakeFromNib {
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
}
告诉OS X要显示哪种光标:
- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender {
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender {
return NSDragOperationCopy;
}
拖动:
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
NSPasteboard *pboard = [sender draggingPasteboard];
NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];
if (1 == filenames.count)
if ([[NSApp delegate] respondsToSelector:@selector(application:openFile:)])
return [[NSApp delegate] application:NSApp openFile:[filenames lastObject]];
return NO;
}
这是使其正常工作的最低要求。