【发布时间】:2012-10-01 06:39:04
【问题描述】:
我有一个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
但我得到的只是调试时委托仍然为零。
我做错了什么?感谢您的帮助!
【问题讨论】:
-
什么是
MyMainUIViewController定义为(NSObject、NSWindowController、NSViewController等)的子类? -
它是一个 NSViewController
标签: objective-c xcode macos cocoa delegates