我试图遵循这个教程(https://www.youtube.com/watch?v=UZ0mp3-JuzY&index=25&list=PLE83F832121568D36)在Cocoa应用程序中拖放。
我使用的是XCode6,因此不推荐视频中使用的一些方法。
我将NSView的子类命名为DropView,并将DropView标识符设置为DropView。
下面是我现在的代码:
#import "DropView.h"
@implementation DropView
-(id)initWithFrame:(NSRect)frameRect
{
self = [super initWithFrame:frameRect];
if(self) {
[self registerForDraggedTypes:[NSArray arrayWithObject:NSURLPboardType]];
}
return self;
}
-(NSDragOperation) draggingEntered:(id<NSDraggingInfo>)sender
{
if ([NSImage canInitWithPasteboard:[sender draggingPasteboard]] && [sender draggingSourceOperationMask] & NSDragOperationCopy)
{
NSLog(@"ENTERED");
return NSDragOperationCopy;
}
NSLog(@"NEVER ENTERED IN DRAGGING ENTERED METHOD");
return NSDragOperationNone;
}
-(NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
{
NSLog(@"DRAGGING");
return NSDragOperationCopy;
}
-(void)draggingEnded:(id<NSDraggingInfo>)sender
{
NSLog(@"ENDED!");
}
-(void)draggingExited:(id<NSDraggingInfo>)sender
{
NSLog(@"EXITED!");
}
-(BOOL)prepareForDragOperation:(id<NSDraggingInfo>)sender
{
NSLog(@"DID I EVER ENTER PREPARE FOR DRAG OPERATION METHOD?");
return YES;
}
-(BOOL)performDragOperation:(id<NSDraggingInfo>)sender
{
if([NSImage canInitWithPasteboard:[sender draggingPasteboard]])
{
NSImage *newImage = [[NSImage alloc ]initWithPasteboard:[sender draggingPasteboard]];
[self setImage:newImage];
}
return YES;
}
-(void)concludeDragOperation:(id<NSDraggingInfo>)sender
{
[self setNeedsDisplay:YES];
}
@end我没有收到任何错误,但似乎没有执行任何代码。我猜frameRect是零,这不是初始化,但我不知道为什么。有人能帮我解决这个问题吗?
你好,约翰
发布于 2014-12-16 01:57:24
好的,解决方案是DropView是NSBox的子类,而不是NSView,即使我不明白为什么.
发布于 2014-12-16 13:04:51
-initWithFrame:打电话了吗?
如果从IB创建视图,请在-initWithCoder:或-awakeFromNib中注册拖放
https://stackoverflow.com/questions/27496163
复制相似问题