2012-01-02 8 views
1

私はアプリ内でドラッグアンドドロップを使用するCocoa Macアプリを持っています。 Finderのように、自分のアプリから他のアプリへ画像をドラッグすることを無効にしたいこれを行う方法はありますか?Cocoaアプリケーションのドラッグを無効にするにはどうすればよいですか?

+3

なぜ*機能*を無効にしますか? –

+0

私は同様の状況に陥った。アプリケーション内で 'NSWindow'をドラッグしたいのですが、ドラッグデータは' NSString'なので、それを解析して 'NSWindow'がドラッグされたことを知ることができます。私のアプリケーションの外では、内部情報を公開する以外にドラッグされた文字列は意味を持ちません。 –

答えて

1

イメージがアプリの外にドラッグされないようにする必要がある真の理由がある場合は、Info.plistのdeclare your own UTIを内部のみのドラッグのドラッグタイプとして使用する必要があります。

次に、ペーストボードタイプを宣言するときにカスタムUTIを指定します。例えば、ドラッグサポートし、あなたのビューで:もちろん

//the UTI string should match the one in your Info.plist 
static NSString* kYourCustomUTIType = @"com.yourCompany.internalDragType"; 

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    NSSize dragOffset = NSZeroSize; 
    NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard]; 

    [pboard declareTypes:[NSArray arrayWithObject:kYourCustomUTIType] owner:self]; 
    [pboard setData:[[self image] TIFFRepresentation] forType:kYourCustomUTIType]; 

    [self dragImage:[self image] at:[self imageLocation] offset:dragOffset 
     event:theEvent pasteboard:pboard source:self slideBack:YES]; 

    return; 
} 

、あなたのドラッグ先が同様にあなたの内部ドラッグの種類を理解していることを確認する必要があると思います。

しかし、画像がアプリの外にドラッグされてはならない本当の理由がない限り、デフォルトの動作を許可するだけです。 Macユーザーは、ドラッグアンドドロップが「うまくいく」ことを期待しています。それを破ることで、あなたのアプリを目立たせています。良い方法ではありません。

関連する問題