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

5
我正在尝试编写一些非常基础的代码,其中我可以将一个普通的“dot.txt”文件拖放到NSWindow上并读取数据(没有更复杂的内容),但我能够找到的所有示例都使用图像和NSViews等。苹果公司的“Cocoa拖放编程主题”文档中的“拖放文件内容”部分确认了在纯NSWindow(而不是NSView等)上拖放是可能的,并且似乎正是我要做的事情,但作为一个相对新手,我仍然觉得它对图像和框架的参考令人困惑。
请问有人可以帮助我开始工作吗?告诉我应该在哪里“registerForDraggedTypes”,而不是将其放在“initWithFrame”或“initWithCoder”方法中,以及注册哪些类型?一旦我让窗口识别我的拖放,我就可以稍后处理其他“performDragOperation”和“draggingEntered”之类的问题。
谢谢 :-)
1个回答

6
这是我正在处理的一部分代码。 您可以在创建新项目时找到这个方法。
-(void)applicationDidFinishLaunching:(NSNotification*)aNotification
{       
    [window registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; 
}

我也是新手。不过,以下方法适用于我。
接下来,这个步骤很重要。我们需要将此对象连接到窗口对象中,以便在该对象中处理拖放消息。
打开MainMenu.xib文件,Interface Builder将弹出。在Interface Builder中,将“App Delegate”(此对象)连接到“Window”的“delegate”输出(您可以在检查器面板中找到“delegate”输出)。现在,“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方法中注册拖放类型。总的来说,这个答案是正确的。 - Rob Keniger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接