2013-05-29 5 views
0

J'ai une sous-classe de NBox que je voudrais faire glisser autour d'une toile appelée dragBox. Je ne comprends pas pourquoi draggingEntered n'est pas déclenché sur le code suivant. Je reçois une belle image de glissement, mais aucun des délégués de destination ne se fait virer. Pourquoi?draggingEnregistré ne pas tirer

-(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 ... Qu'est-ce que NBox? XBox? NSImageView? –

Répondre

0

Dans votre méthode mouseDown vous ne mettez rien dans la table de montage avant de lancer l'opération de déplacement. Le documentation pour NSView indique que vous devez ajouter vos données sur le carton avant de l'envoyer à ce message.

Toutes les vues de destination que vous avez sont, ou devraient être, en train d'enregistrer pour un certain type de drag. Si votre table de montage ne contient aucune donnée correspondante pour ce type, les destinations ne déclencheront aucun des messages NSDraggingProtocol.

+0

Bonjour, J'ai essayé de configurer un NSStringPboardType avant d'appeler l'appel à dragImage. Ça n'a pas marché. Toujours pas d'événements se faire virer. – bc888

0

Résolu! J'utilisais la NSBox à la fois comme destination et comme source. Les événements n'étaient pas déclenchés quand c'était le cas. J'ai déplacé registerDragTypes à l'aperçu, le canevas, et mis en œuvre le draggingEntered et performDrag là. Cela fonctionne maintenant ...

Bruce

+0

J'allais faire un commentaire à ce sujet, mais je supposais que vous faisiez glisser l'une des instances de votre NSBox sur d'autres instances de NSBox qui auraient fonctionné. : / –