我想实现一些“简单的”拖放到我的Mac应用程序中。我拖入一个视图,并在nib文件中输入"MyView“accordingly.However我在控制台中没有得到任何响应(每当触发任何协议方法时,我都会尝试记录消息)
我将NSView子类化如下:
@interface MyView : NSView <NSDraggingDestination>{
NSImageView* imageView;
}并像这样实现它:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self registerForDraggedTypes:[NSImage imagePasteboardTypes]];
NSRect rect = NSMakeRect(150, 0, 400, 300);
imageView = [[NSImageView alloc] initWithFrame:rect];
[imageView setImageScaling:NSScaleNone];
[imageView setImage:[NSImage imageNamed:@"test.png"]];
[self addSubview:imageView];
}
return self;
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender{
NSLog(@"entered");
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender{
return NSDragOperationCopy;
}
- (void)draggingExited:(id <NSDraggingInfo>)sender{
NSLog(@"exited");
}
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender{
NSLog(@"som");
return YES;
}
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
NSPasteboard *pboard = [sender draggingPasteboard];
if ( [[pboard types] containsObject:NSURLPboardType] ) {
NSURL *fileURL = [NSURL URLFromPasteboard:pboard];
NSLog(@"%@", fileURL);
}
return YES;
}
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender{
NSLog(@"conclude sth");
}
- (void)draggingEnded:(id <NSDraggingInfo>)sender{
NSLog(@"ended");
}
- (BOOL)wantsPeriodicDraggingUpdates{
NSLog(@"wants updates");
}
- (void)updateDraggingItemsForDrag:(id <NSDraggingInfo>)sender NS_AVAILABLE_MAC(10_7){
}发布于 2012-11-11 02:29:48
如果任何人仍然需要它,请使用:
[self registerForDraggedTypes:[NSArray arrayWithObjects:
NSFilenamesPboardType, nil]];而不是:
[self registerForDraggedTypes:
[NSImage imagePasteboardTypes]]; // BAD: dropped image runs away, no draggingdestination protocol methods sent...为我解决了这个问题。我怀疑这是可行的,因为我的XIB针对的是osX 10.5。NSFilenamesPboardType表示10.5及更早版本的“标准数据”UTI,而NSImage imagePasteboardTypes返回10.6及更高版本的标准数据UTI。
顺便说一下,在- (BOOL)performDragOperation:(id NSDraggingInfo)sender中,您可以使用以下命令获取被丢弃的文件的路径:
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];在这里得到了解决方案:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DragandDrop/Tasks/acceptingdrags.html#//apple_ref/doc/uid/20000993-BABHHIHC
https://stackoverflow.com/questions/12168059
复制相似问题