如何在控制器运行完毕后从appdelegate运行方法?

时间:2012-11-11 02:01:02

标签: objective-c nsview nsdragginginfo

我的想法是,我有一个自定义视图,用户可以拖放一个或多个文件,控制器可以将文件路径保存到数组中。

如何在用户将文件放入界面后从AppDelegate运行方法?

我有这些文件:

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

1 个答案:

答案 0 :(得分:2)

将AppDelegate.h导入DropView.m,并从performDragOperation:方法调用要运行的方法。

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

Where doWhatever:是在app delegate中实现的方法。