Ziehen Sie eine Schaltfläche in OSX 10.8 SDK / Objective-c

Ich habe angefangen, Objective-c zu verwendenheute um eine App für OSX (Berglöwe) zu entwickeln. Ich habe eine Reihe von Schaltflächen, die ich in ein anderes Objekt ziehen möchte, beispielsweise ein Textfeld. Ich habe die Tutorials auf der Entwickler-Website von Apple verfolgt, aber ich kann den Drag-Part nicht zum Laufen bringen (der Drop-Part funktioniert zum Beispiel, ich kann eine Datei vom Finder in eine Textdatei ziehen und ihren Pfad anzeigen).

Ich habe mit dem Erstellen einer NSButton-Unterklasse begonnen:@interface mp3OCDDraggableButton : NSButton

und implementiert die Methoden wie in beschrieben:https://developer.apple.com/library/mac/#samplecode/CocoaDragAndDrop/Introduction/Intro.html

aber das ding rührt sich doch!

Ich habe einige Logmeldungen in mouseDown: abgelegt, die ich in sehen kann, aber nicht, wenn ich sie durch mouseDragged ersetze: - sagt mir das etwas?

Kann jemand ein einfaches Beispiel mit dieser Funktionalität posten? Ich konnte nichts finden, was funktioniert: \ Vielen Dank im Voraus!

Dies ist der Code, den ich bisher für die ziehbare Schaltfläche habe. So ziemlich das gleiche wie im Tutorial.

und

//myDraggableButton.h

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

Bitte posten Sie Ihren Code. Es ist fast unmöglich zu wissen, wo man überhaupt anfangen soll, ohne zu wissen, was Sie geschrieben haben.

//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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage