我有一个NSImageView
子类,用于在我的应用中拖放文件。
为此,我创建了一个NSImageView
的子类,并将NSImageView
拖到我的XIB上,然后将XIB NSImageView
对象的类设置为我的自定义子类。
一切都适用于拖放,我知道拖动后我有正确的文件。
当我想根据拖入的文件更新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{ }
现在我已尝试在各个地方将委托分配给self(在viewDidLoad
中 - 由于视图正在XIB中加载而不会被调用?)以及
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
但我回来的是调试时委托仍然是零。
我做错了什么?谢谢你的帮助!!
答案 0 :(得分: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;
}
或者通过界面构建器设置委托,方法是将文件所有者的控制权拖动到视图中。像这样:
答案 1 :(得分:0)
我能够添加委托给awakefromnib(在mymainviewcontroller中)方法,现在情况正常。感谢