Mr *_*eph 9 macos cocoa objective-c
我有一个处理营销信息的简单应用程序.我做的是打电话
NSInteger result = [openPanel runModalForDirectory:nil file:nil types:fileTypes];
Run Code Online (Sandbox Code Playgroud)
当用户点击File->Open菜单时.现在我被要求向应用程序添加拖放功能,以便用户可以将文件拖到它上,而不必转到菜单或按下命令+ o打开文件.
在你告诉我去阅读文档之前,我已经检查了Apple的简介以进行拖放和其他文档.我仍然无法弄清楚该怎么做.
我是一个老的Unix C程序员,需要复制这个,Apple的文档中的一些假设对我来说没有意义.
简而言之,我需要将哪些内容添加到我的应用中:
作为一个注释,我应该一次只处理一个文件.
谢谢您的帮助
Fra*_*rew 16
那么,你需要实现NSDraggingDestination协议,我认为你已经阅读过了.您可以在特定视图或整个窗口中实现它 - 听起来您正在接受应用程序级文件拖动,因此您可能希望整个窗口接受拖动.无论如何,一旦你开始工作,你将看到如何进一步定制它.
子类NSWindow.第一步是指定您感兴趣的拖拉类型.
告诉您的自定义窗口它对文件名感兴趣:
- (void)awakeFromNib {
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
}
Run Code Online (Sandbox Code Playgroud)
告诉OS X要显示哪种光标:
- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender {
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender {
return NSDragOperationCopy;
}
Run Code Online (Sandbox Code Playgroud)
拖动:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
这是让它工作的最低要求.
| 归档时间: |
|
| 查看次数: |
3215 次 |
| 最近记录: |