【问题标题】:Implementations details of drag and drop of file path in cocoacocoa中文件路径拖放的实现细节
【发布时间】:2010-06-05 15:29:00
【问题描述】:

我正在尝试让我的窗口的一部分对拖放做出反应。在这种情况下,将文件路径复制到被拖放到视图上的文件。我查看了一些文档,但我仍然有一些问题要确切地了解我应该在哪里实现我的拖放方法。

我看过一些示例,但几乎所有示例都假定我想在视图上放置图像。我对可可和 Xcode 还很陌生,所以在查看界面生成器和生成的代码之间的确切关系时遇到了一些问题。

我为 NSView 创建了一个子类,称为 drop zone,如下所示:

#import <Cocoa/Cocoa.h>

@interface dropZone : NSView {

}

@end

然后我使用 NSRect 将其涂成灰色,如下所示:

#import "dropZone.h"

@implementation dropZone


- (void)drawRect:(NSRect)rect
{

    NSRect bounds = [self bounds];
    [[NSColor grayColor] set];
    [NSBezierPath fillRect:bounds];
}
@end

然后我将这个类拖到界面生成器中的窗口中。但是我需要实现registerForDraggingTypes 方法,但是在哪里呢?我还在 Apple 文档中看到了一种用于文件路径的便捷方法:dragFile:fromRect:slideBack:event:,这可能有效。

我应该使用第一响应者吗?一个 init 方法还是什么?

【问题讨论】:

    标签: objective-c cocoa drag-and-drop


    【解决方案1】:

    您不必覆盖registerForDraggedTypes:。你只需要调用它。但是,您必须重写方法以响应通过拖动或释放拖动等进入您的视图。因此,如果您的视图需要接受 MyCustomDropType 类型的 drop,那么您可以这样做:

    [myView registerForDraggedTypes:[NSArray arrayWithObject:MyCustomDropType]];
    

    那么你的拖动方法只有在声明提供MyCustomDropType数据时才会触发。

    【讨论】:

    • 谢谢。如果我这样做:[self registeredDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; 在我的 drawRect 方法中出现以下错误:dropZone may not respond to -registeredDraggedTypes.
    • 不要使用[self registeredDraggedTypes:...];,使用[self registerForDraggedTypes:...]
    • 啊,我的一个错误:-)。它现在编译并且视图似乎正在获取文件。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2021-02-07
    • 2011-05-20
    • 2012-03-28
    相关资源
    最近更新 更多