Przeciągnij przycisk w OSX 10.8 SDK / object-c

Zacząłem używać obiektywu-cdzisiaj w celu opracowania aplikacji dla OSX (lew górski). Mam kilka przycisków, które chciałbym przeciągnąć do innego obiektu, na przykład pola tekstowego. Poszedłem za samouczkami na stronie dev firmy Apple, ale nie jestem w stanie uzyskać działania części przeciągającej (na przykład część upuszczania, mogę przeciągnąć plik z Findera do pliku tekstowego i pokazać jego ścieżkę).

Zacząłem od utworzenia podklasy NSButton:@interface mp3OCDDraggableButton : NSButton

i zaimplementował metody opisane w:https://developer.apple.com/library/mac/#samplecode/CocoaDragAndDrop/Introduction/Intro.html

ale to, co najbardziej się porusza!

Umieszczam kilka logów w mouseDown :, co widzę, ale nie, jeśli zastąpię je myszką: - czy to mi coś mówi?

Czy ktoś może zamieścić prosty przykład z tą funkcjonalnością? Nie mogłem znaleźć niczego, co działa:

Z góry bardzo dziękuję!

To jest kod, który do tej pory mam dla przycisku przeciągania. Tak samo jak w samouczku.

//myDraggableButton.h

@interface myDraggableButton : NSButton <NSDraggingSource, NSPasteboardItemDataProvider>
@end

i

//myDraggableButton.m

#import "myDraggableButton.h"

@implementation myDraggableButton

- (void)mouseDown:(NSEvent *)theEvent:(NSEvent*)event
{

    NSLog(@"mouseDown");

    NSPasteboardItem *pbItem = [NSPasteboardItem new];
    [pbItem setDataProvider:self forTypes:[NSArray arrayWithObjects:NSPasteboardTypeString, nil]];
    NSDraggingItem *dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter:pbItem];
    NSRect draggingRect = self.bounds;
    [dragItem setDraggingFrame:draggingRect contents:[self image]];
    NSDraggingSession *draggingSession = [self beginDraggingSessionWithItems:[NSArray arrayWithObject:dragItem] event:event source:self];
    draggingSession.animatesToStartingPositionsOnCancelOrFail = YES;
    draggingSession.draggingFormation = NSDraggingFormationNone;
}

- (NSDragOperation)draggingSession:(NSDraggingSession *)session sourceOperationMaskForDraggingContext:(NSDraggingContext)context
{
    switch (context) {
        case NSDraggingContextOutsideApplication:
            return NSDragOperationCopy;
        case NSDraggingContextWithinApplication:
        default:
            return NSDragOperationCopy;
            break;
    }
}

- (BOOL)acceptsFirstMouse:(NSEvent *)event
{
    return YES;
}

- (void)pasteboard:(NSPasteboard *)sender item:(NSPasteboardItem *)item provideDataForType:(NSString *)type
{
    if ( [type compare: NSPasteboardTypeTIFF] == NSOrderedSame ) {
        [sender setData:[[self image] TIFFRepresentation] forType:NSPasteboardTypeTIFF];
    } else if ( [type compare: NSPasteboardTypePDF] == NSOrderedSame ) {
        [sender setData:[self dataWithPDFInsideRect:[self bounds]] forType:NSPasteboardTypePDF];
    }

}

@end

questionAnswers(2)

yourAnswerToTheQuestion