gpt4 book ai didi

objective-c - 在 Cocoa 应用程序上接受拖动的文件

转载 作者:太空狗 更新时间:2023-10-30 03:28:18 26 4
gpt4 key购买 nike

我有一个处理营销信息的简单应用程序。我所做的就是调用

NSInteger result  = [openPanel runModalForDirectory:nil file:nil types:fileTypes];

当用户单击 File->Open 菜单时。现在,我被要求向应用程序添加拖放功能,以便用户可以将文件拖到其中,而不必转到菜单或按 command+o 打开文件。

在你告诉我去阅读文档之前,我已经检查了 Apple 的 Intro to drag and drop和其他文件。我仍然不知道该怎么办。

我是一个老的 Unix C 程序员,需要用这个来复制,Apple 文档中的一些假设对我来说没有意义。

简而言之,我需要将什么添加到我的应用中:

  1. 启用拖放
  2. 处理拖拽的文件

请注意,我应该一次只处理一个文件。

感谢帮助

最佳答案

那么,您需要实现 NSDraggingDestination 协议(protocol),我想您已经阅读过该协议(protocol)。您可以在特定 View 或整个窗口中实现它——听起来您正在接受应用程序级文件拖动,因此您可能希望整个窗口都接受拖动。无论如何,一旦您开始使用它,您就会看到如何进一步自定义它。

子类 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;
}

这是让它工作的最低限度。

关于objective-c - 在 Cocoa 应用程序上接受拖动的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com