1

NSImageViewアプリでファイルをドラッグ アンド ドロップするために使用 するサブクラスがあります。

これを行うために、 のサブクラスを作成し、 を XIB にNSImageViewドラッグしNSImageView、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

しかし、デバッグ時にデリゲートがまだnilであることだけが返ってきます。

私は何を間違っていますか?助けてくれてありがとう!!

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;
}

または、ctrl を押したままファイルの所有者からビューにドラッグして、インターフェイス ビルダーを介してデリゲートを設定します。このような:
ここに画像の説明を入力

于 2012-09-16T13:51:28.917 に答える
0

デリゲートを awakefromnib(in mymainviewcontroller) メソッドに追加することができ、現在は正常に機能しています。ありがとう

于 2012-09-27T11:10:43.930 に答える