2013-05-29 7 views
0

dragBox라는 캔버스 주위로 드래그하려는 NBox의 하위 클래스가 있습니다. draggingEntered가 다음 코드에서 해고되지 않는 이유를 알지 못합니다. 멋진 슬라이드 백 이미지를 얻었지만 대상 대행자 중 누구도 해고되지 않습니다. 왜?draggingEntered not firing

-(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; 

} 
+0

NBox ... NBox 란 무엇인가요? X 박스? NSImageView? –

답변

0

mouseDown 메서드에서는 드래그 작업을 시작하기 전에 아무 것도 투입하지 않습니다. NSView 용 documentation은 메시지에 메시지를 보내기 전에 데이터를 대지에 추가해야한다고 말합니다.

귀하가 가지고있는 목적지보기가 무엇이든간에 또는 특정 드래그 유형을 등록해야합니다. 페이스트 보드에 해당 유형에 대해 일치하는 데이터가없는 경우 대상은 NSDraggingProtocol 메시지를 발생시키지 않습니다.

+0

안녕하세요, dragImage에 대한 호출을 호출하기 전에 NSStringPboardType을 설정하려고했습니다. 그것은 작동하지 않았다. 아직도 사건이 해고되지 않습니다. – bc888

0

해결!

NSBox를 대상 및 소스로 사용하고있었습니다. 이 사건이 발생했을 때 사건은 해고되지 못했습니다. registerDragTypes를 superview, 캔버스로 이동하고 draggingEntered 및 performDrag를 구현했습니다. 이제 작동 ...

브루스

+0

나는 그것에 대해 논평 할 것이지만, 나는 당신이 NSBox의 인스턴스 중 하나를 다른 NSBox 인스턴스로 드래그한다고 가정하고있다. : / –