8

私は NSTableView と NSOutlineView を持っています。どちらもバインディングによって提供されるコンテンツを持ち、ドラッグ アンド ドロップ機能が必要です。

  • テーブル Aからアウトライン B の行に行をドラッグすると、アウトライン B の行が表すデータ構造にコピーされます。

  • 行をアウトライン Bからアウトライン B の別の行にドラッグします。これにより、最初の行で表されるデータが 2 番目の行で表されるデータにコピーされます。

私はApple のドラッグ アンド ドロップに関するドキュメントを読んだことがありますが、どこにも行き着きませんでした。私がしなければならないことに実際には当てはまらないようです。私は何が欠けていますか?

4

3 に答える 3

7

リンク先のページは、何をする必要があるかについて非常に明確です。テーブル A のデータ ソースで、いくつかのプライベートデータをペーストボードに配置するためにregisterForDraggedTypes:andを実装します。tableView:writeRowsWithIndexes:toPasteboard:TableAPasteboardType

アウトライン B のデータ ソースで、同じ 2 つのメソッドを実装し、いくつかのプライベートOutlineBPasteboardTypeデータをペーストボードに配置します。

最後に、 と を実装tableView:validateDrop:proposedRow:proposedDropOperation:tableView:acceptDrop:row:dropOperation:てペーストボードをチェックし、TableAPasteboardTypeまたはOutlineBPasteboardTypeに応じて、バインドされたモデルに適切な変更を加えます。

突っ込んで実行すると、非常に簡単です。

于 2009-03-16T06:25:02.440 に答える
5

MacOS 10.7 では、これを実装するためにいくつかの新しいプロトコルが追加されました。

現時点では、テーブルのドキュメントは不足していますが、いくつかの良い例を見つけることができます:

NSTableVieww の場合、プロトコル NSTableViewDataSource は次のメソッドを定義します。

  • (BOOL)tableView:writeRowsWithIndexes:toPasteboard:
  • tableView:validateDrop:proposedRow:proposedDropOperation:
  • tableView:acceptDrop:row:dropOperation:

NSOutlineView の場合、プロトコル NSOutlineViewDataSource は次のメソッドを定義します。

  • (BOOL)outlineView:writeItems:toPasteboard:
  • (NSDragOperation)outlineView:validateDrop:proposedItem:proposedChildIndex:
  • (BOOL)outlineView:acceptDrop:item:childIndex:

これらは、ビューの種類ごとに実装するための最小要件です。ユースケースは非常に似ています。

  1. toPasteboard: メソッドが YES を返した場合、ドラッグが開始されます。
  2. validateDrop: メソッドは、ビュー内のマーカーを更新することにより、許可されるターゲット ノードを制御します。
  3. ドロップが成功した場合、acceptDrop: メソッドに対して YES を返す

これにより、管理しなければならない 2 つのサブユースケースが発生します。1 つ目は、同じビュー内でのドラッグ アンド ドロップ、または 2 つのビュー間での同じ操作です。さらに、移動、コピー、または削除操作を区別できます。良い例は、ブレークポイントが Xcode のドラッグ & ドロップでどのように機能するかです。

tableView には、ドラッグ アンド ドロップをカスタマイズするための追加のメソッドがいくつかありますが、私が言及したものは、それを機能させるための主要なメソッドです。

于 2012-09-01T07:19:04.140 に答える
5

データ ソースが必要です。私の知る限り、Bindings だけでこれを実現することはできません。

BSD ライセンスの下にある未完成の Adium Xtras Creator には、データ ソースとして設定して Bindings を利用したテーブル ビューでドラッグ アンド ドロップできるアレイ コントローラーが含まれています。

この要件は、NSOutlineView および NSTreeController には適用されない場合があります。私はそれを試していません。

于 2009-03-16T06:34:23.417 に答える