2012-11-12 48 views
3

我在的NSView testig拖放,但draggingEntered:不会被调用。代码:拖放在一个NSView

#import <Cocoa/Cocoa.h> 
@interface testViewDrag : NSView <NSDraggingDestination> 
@end 

@implementation testViewDrag 
- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) 
{ 
    [self registerForDraggedTypes:[NSImage imagePasteboardTypes]]; 
    NSLog(@"initWithFrame"); 
} 
return self; 
} 

-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender 
{ 
NSLog(@"draggingEntered"); 
return NSDragOperationEvery; 
} 

-(NSDragOperation) draggingUpdated:(id<NSDraggingInfo>)sender 
{ 
    NSLog(@"draggingUpdated"); 
    return NSDragOperationEvery; 
} 
@end 

在界面生成器我添加一个子视图(类设置为testViewDrag)到主窗口。 在日志中我可以看到initWithFrame日志,但是当我什么都不拖在日志中显示。

什么,我缺少什么? “

回答

7

”要接收拖动操作,必须通过向对象发送一个registerForDraggedTypes:消息(在NSWindow和NSView中定义)来注册窗口或视图将接受的粘贴板类型,并实现NSDraggingDestination协议中的几种方法。拖动会话,仅当目的地被注册为匹配剪贴板的数据的类型被拖动一个纸板类型的候选目的地接收NSDraggingDestination消息,目的接收这些消息作为一个图像进入,围绕内移动,然后退出或释放在目的地的边界内“。您可以阅读关于拖放式编程主题here的更多信息。在我看来,你的问题就在于你在registerForDraggedTypes:方法定义的参数。

尝试用这种替代它:

[self registerForDraggedTypes:[NSArray arrayWithObjects: 
     NSColorPboardType, NSFilenamesPboardType, nil]]; 

希望这有助于!

+0

谢谢你的工作就像一个魅力,如果你现在可以告诉我怎么去 拖动文件的路径:) –

+2

例如, - (BOOL)performDragOperation:(ID )发件人{ 的NSArray * thefiles = [[sender draggingPasteboard] propertyListForType:NSFilenamesPboardType]; //处理任何你想在这里 } –

+0

我真的很感谢你的帮助,这是我的应用程序拉斯维加斯点,非常感谢你。 –