2011-05-19 18 views
0

私のアプリケーションにドラッグアンドドロップ機能を実装しました。すべての機能は十分ですが、我々はNSTableViewに画像をドラッグすると、NSTableViewのドラッグアンドドロップが動作しません

- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender 

メソッドが呼び出さ取得されていません。

このメソッドが呼び出されない理由を教えてください。

- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender 

答えて

5

私もこれを実装した場合でも

...私たちはより多くの情報が必要。

「...しかし、我々はNSTableViewに画像をドラッグして」

あなたは、 『画像』とはどういう意味ですか、どこで(どのようなアプリケーション)あなたがこの画像をドラッグしていますか?たとえば、アプリケーションのテーブルビューにドラッグしているFinderからのイメージファイル(Picture.png)を意味しますか?または、自分のアプリケーションから、ある場所からテーブルビューに画像をドラッグしていますか?

これは独自のカスタムサブクラスNSTableViewですか?それは、-performDragOperation:または-prepareForDragOperation:が呼び出される唯一の場所だからです。デフォルトでは、NSTableViewは、これらのプリミティブなNSDraggingDestinationメソッドをオーバーライドして、Bavarious(-tableView:validateDrop:proposedRow:proposedDropOperation:-tableView:acceptDrop:row:dropOperation:など)のような独自のテーブルビュー指向タイプのメソッドを実装します。あなたはこれらのメソッドはNSTableViewサブクラスで呼び出されていないという事実について話している場合は、-prepareForDragOperation:ためにどのようなドキュメントの状態を覚えている:または draggingUpdated:

をこのメソッドは、 最新draggingEntered場合に呼び出されます:メッセージが

だから、まず、あなたはあなたが欲しいドラッグタイプのために登録したことを確認する必要があり 許容ドラッグ操作値を返され、その後、あなたは-draggingEnteredを実装する必要があります。

一方、NSTableViewサブクラスではなく外部コントローラクラスの場合は、performDragOperation:prepareForDragOperation:は呼び出されません。つまり、コントローラークラスがMDAppControllerの場合、デリゲートとデータソースはNSTableViewに設定され、-performDragOperation:prepareForDragOperation:MDAppControllerと呼び出されません。これらのメソッドは、NSViewベースのクラスを対象としています。そのため、NSTableViewは、NSTableViewDataSourceプロトコルで定義されている以下のメソッドを持っています:tableView:validateDrop:proposedRow:proposedDropOperation:。これをコントローラクラスに実装する場合は、tableViewを適切に設定し、必要なデータ型に登録されていれば、呼び出す必要があります。

関連する問題