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

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

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

谢谢:-)

【问题讨论】:

    标签: cocoa drag-and-drop nsdragginginfo


    【解决方案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 方法。不过总的来说,答案是正确的。
    猜你喜欢
    • 2012-04-14
    • 2016-09-21
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多