如何在 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”文件的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:如何在 macOS 上从 Mail 中拖放电子邮件