如何在 obj-c 中拖放“.txt”文件

Posted

技术标签:

【中文标题】如何在 obj-c 中拖放“.txt”文件【英文标题】:How do I Drag and Drop a '.txt' file in obj-c 【发布时间】:2011-01-03 09:08:33 【问题描述】:

我正在尝试编写一些绝对准系统的代码,在其中我可以将一个普通的“dot.txt”文件拖到一个 NSWindow 上并读取数据(没有比这更有趣的了),但是我已经能够的所有示例查找使用图像和 NSView 等。Apple 在其“可可拖放编程主题”文档中的“拖动文件内容”部分确认可以拖动到普通 NSWindow(而不是 NSView 等)上,并且似乎在讨论正是我想要做的,但作为一个相对新手,我仍然觉得它对图像和框架的引用令人困惑。

任何人都可以帮助我开始,向我展示“registerForDraggedTypes”的位置,而不是把它放在说,一个“initWithFrame”或“initWithCoder”方法,以及注册什么类型?一旦我得到窗口来识别我的拖动,我就可以稍后再担心其他的“performDragOperation”和“draggingEntered”。

谢谢:-)

【问题讨论】:

【参考方案1】:

这是我正在处理的代码的一部分。 新建项目的时候可以找到这个方法。

-(void)applicationDidFinishLaunching:(NSNotification*)aNotification
       
    [window registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; 

我也是新手。无论如何,这对我有用。

然后,这很重要。 我们必须将此对象连接到窗口对象以处理此对象中的丢弃消息

打开MainMenu.xib,会弹出Interface Builder。 在 Interface Builder 中,将“App Delegate”(此对象)连接到“Window”的“delegate”出口。 (您可以在 Inspector 面板中找到“代表”出口) 现在,“App Delegate”接收到“Window”的事件消息。

然后,在同一个类文件中添加更多方法:

-(NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender

    return NSDragOperationGeneric;

-(BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender

    NSPasteboard* pbrd = [sender draggingPasteboard];
    // Do something here.
    return YES;

【讨论】:

这对于您有一个具有window 出口的应用程序委托的特定情况是可以的,但通常一个窗口将由NSWindowController 管理并且您将在其中注册拖动类型窗口控制器的-windowDidLoad 方法。不过总的来说,答案是正确的。

以上是关于如何在 obj-c 中拖放“.txt”文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JTable 中拖放一行?

SwiftUI:如何在 macOS 上从 Mail 中拖放电子邮件

如何在 React 中拖放多个元素?

如何使用 jQuery 在 div 中多次拖放图像以及在 drop div 中拖放图像?

如何在 SwiftUI (macOS) 中拖放未捆绑的图像

如何在图片框中拖放图像[关闭]