Question

The idea is that I hava a custom view where the user can drag and drop one or more files and the controller is able to save the path of files into an array.

How can I run a method from AppDelegate after the user drops the file in the interface?

I have these files:

AppDelegate.h:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSScrollView *table;
@property (assign) IBOutlet NSWindow *window;
@end

AppDelegate.m:

#import "AppDelegate.h"

    @implementation AppDelegate
    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
    {
        // Insert code here to initialize your application
    }

    @end

DropView.h:

#import <Cocoa/Cocoa.h>

@interface DropView : NSView <NSDraggingDestination>
@property (assign) IBOutlet NSScrollView *table;
@property NSArray *draggedFilePaths;
@end

DropView.m:

#import "DropView.h"

@implementation DropView
@synthesize draggedFilePaths;

- (id)initWithFrame:(NSRect)frame
{

    self = [super initWithFrame:frame];
    if (self) {
        [self registerForDraggedTypes:[NSArray arrayWithObject:NSURLPboardType]];
    }

    return self;
}

-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender{
    return NSDragOperationGeneric;
}

-(NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender{
    return NSDragOperationCopy;
}
-(BOOL)prepareForDragOperation:(id<NSDraggingInfo>)sender{
    return YES;
}

-(BOOL)performDragOperation:(id<NSDraggingInfo>)sender{
    NSPasteboard* prb;
    prb= [sender draggingPasteboard];
    draggedFilePaths = [prb propertyListForType:NSFilenamesPboardType];
    return YES;
}

- (void)concludeDragOperation:(id<NSDraggingInfo>)sender{
    [self setNeedsDisplay:YES];
    NSLog(@"path %@",draggedFilePaths);
    [self populateTable];
}

- (void)drawRect:(NSRect)dirtyRect
{
}

-(void)populateTable{
    NSLog(@"yes");
}

@end
Was it helpful?

Solution

Import AppDelegate.h into DropView.m, and call the method you want to run from the performDragOperation: method.

-(BOOL)performDragOperation:(id<NSDraggingInfo>)sender{
    NSPasteboard* prb;
    prb= [sender draggingPasteboard];
    draggedFilePaths = [prb propertyListForType:NSFilenamesPboardType];
    [(AppDelegate *)[[NSApplication sharedApplication]delegate] doWhatever:draggedFilePaths]; 
    return YES;
}

Where doWhatever: is a method implemented in the app delegate.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top