5

NSView でドラッグ アンド ドロップをテストしていますが、draggingEntered:呼び出されません。

コード:

#import <Cocoa/Cocoa.h>
@interface testViewDrag : NSView <NSDraggingDestination>
@end

@implementation testViewDrag
- (id)initWithFrame:(NSRect)frame
{
   self = [super initWithFrame:frame];
   if (self)
{
    [self registerForDraggedTypes:[NSImage imagePasteboardTypes]];
    NSLog(@"initWithFrame");
}
return self;
}

-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
NSLog(@"draggingEntered");
return NSDragOperationEvery;
}

-(NSDragOperation) draggingUpdated:(id<NSDraggingInfo>)sender
{
  NSLog(@"draggingUpdated");
  return NSDragOperationEvery;
}
@end

インターフェイス ビルダーでsubView(クラスを に設定testViewDrag) をメイン ウィンドウに追加します。ログにはinitWithFrameログが表示されますが、ドラッグしてもログに何も表示されません。

私は何が欠けていますか?

4

1 に答える 1

9

「ドラッグ操作を受け取るには、NSWindow と NSView の両方で定義された registerForDraggedTypes: メッセージをオブジェクトに送信して、ウィンドウまたはビューが受け入れるペーストボード タイプを登録し、NSDraggingDestination プロトコルからいくつかのメソッドを実装する必要があります。ドラッグ セッション中に、候補の宛先は NSDraggingDestination メッセージを受け取ります. 宛先がドラッグされているペーストボードデータのタイプと一致するペーストボードタイプに登録されている場合にのみ. 宛先はこれらのメッセージを受け取ります. ." ドラッグ アンド ドロップ プログラミングのトピックの詳細については、こちらを参照してください。私が見ているように、あなたの問題は、registerForDraggedTypes:メソッドで定義する引数にあります。

これを次のように置き換えてみてください。

[self registerForDraggedTypes:[NSArray arrayWithObjects:
        NSColorPboardType, NSFilenamesPboardType, nil]];

お役に立てれば!

于 2012-11-12T12:40:10.350 に答える