1

我有一个NSImageView子类,用于将文件拖放到我的应用程序中。

为此,我创建了一个子类NSImageView并将其NSImageView拖到我的 XIB 上,然后将 XIBNSImageView对象的类设置为我的自定义子类。

一切都适用于拖放,我知道拖放后我有正确的文件。

当我想根据拖入的文件更新 MainViewController 上的文本字段时,问题就出现了。

我创建了以下子类和协议

#import <Cocoa/Cocoa.h>
#import <Quartz/Quartz.h>

@protocol PDFDraggedIntoWell <NSObject>
@required
-(void)PDFDraggedIntoWellWithURL:(NSURL*) importedURL;

@end


@interface DragAndDropImageView : NSImageView

@property (strong) id <PDFDraggedIntoWell> delegate;

@end

然后在子类的实现中,我尝试调用委托方法

-(void) finishedDragginInFileWithURL:(NSURL*) importedURL{
    if( self.delegate != nil && [ self.delegate respondsToSelector: @selector(PDFDraggedIntoWellWithURL:)]) {
        [self.delegate performSelector:@selector(PDFDraggedIntoWellWithURL:) withObject:importedURL];
    }
}

我遇到的问题是如何分配代表。从 XIB NSImageView 到我的 MainviewController 我连接了一个IBOutlet

@property (weak) IBOutlet DragAndDropImageView *draggedFileImageView;

我已经声明我的 ViewController 将接收委托

@interface MyMainUIViewController ()<PDFDraggedIntoWell>

实施了适当的方法

-(void) PDFDraggedIntoWellWithURL:(NSURL *)importedURL{   }

现在我已经尝试在各个地方将委托分配给自我(在viewDidLoad- 由于视图正在加载到 XIB 中,因此不会被调用??)以及

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

但我得到的只是调试时委托仍然为零。

我究竟做错了什么?谢谢您的帮助!!

4

2 回答 2

0

如果您使用的是 xibx,initWithCoder则调用该方法进行初始化。在那里设置你的代表。

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
        myView.delegate = self;
    }
    return self;
}

或者,通过将 wile 按住 ctrl 从文件所有者拖动到您的视图,通过界面构建​​器设置委托。像这样:
在此处输入图像描述

于 2012-09-16T13:51:28.917 回答
0

我能够将委托添加到 awakefromnib(in mymainviewcontroller) 方法中,现在一切正常。谢谢

于 2012-09-27T11:10:43.930 回答