我有一個名爲dragBox的NSBox子類。我希望能夠在畫布上拖動它。代碼如下:draggingEntered not called
-(void) awakeFromNib
{
[[self superview] registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
}
-(void) mouseDown:(NSEvent *)theEvent
{
[self dragImage:[[NSImage alloc] initWithContentsOfFile:@"/Users/bruce/Desktop/Untitled-1.png"] at:NSMakePoint(32, 32) offset:NSMakeSize(0,0) event:theEvent pasteboard:[NSPasteboard pasteboardWithName:NSDragPboard] source:self slideBack:YES];
}
-(NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender // validate
{
NSLog(@"Updated");
return [sender draggingSourceOperationMask];
}
-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
NSLog(@"Drag Entered");
return [sender draggingSourceOperationMask];
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {
NSLog(@"Move Box");
[self setFrameOrigin:[sender draggingLocation]];
return YES;
}
-(BOOL) prepareForDragOperation:(id<NSDraggingInfo>)sender
{NSLog(@"Prepared");
return YES;
}
爲什麼不調用dragEntered?我曾嘗試使用所有的紙板類型等。似乎沒有任何工作。我也將registerForDraggedTypes更改爲[self]視圖。該框是畫布的子視圖。
布魯斯
每次調用'drawRect:'時註冊都是一個壞主意。在這裏設置一個斷點來看看我的意思。它被稱爲一噸。您應該在'initWithFrame:'中執行此操作。 –
同意「Sam Soffes」,代碼可以在「initWithFrame」中更改並註冊。 DrawRect將在每次刷新視圖時被調用,並且即使它已經被重新註冊 –