1

アプリケーションにドラッグアンドドロップ機能を実装しました。すべての機能は良好ですが、画像をにドラッグするとNSTableView

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

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

このメソッドが呼び出されない理由を誰かに教えてもらえますか?

これも実装しても…

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

1 に答える 1

6

もっと多くの情報が必要です。

「...しかし、画像をNSTableViewにドラッグすると」

「画像」とは何を意味し、この画像をどこ (どのアプリケーション) からドラッグしていますか? たとえば、Finder からアプリケーションのテーブル ビューにドラッグしている画像ファイル (Picture.png) を意味しますか? または、独自のアプリケーションから、ある場所からテーブル ビューに画像をドラッグしていますか?

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

このメソッドは、最新の dragEntered: または dragUpdated: メッセージが許容可能なドラッグ操作値を返した場合にのみ呼び出されます。

したがって、まず、必要なドラッグ タイプを登録したことを確認してから、 を実装する必要があります-draggingEntered

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

于 2011-05-19T09:08:22.573 に答える