3

NSTableView に非常に基本的なドラッグ アンド ドロップを設定しようとしています。テーブル ビューには、(カスタム セルを含む) 1 つの列があります。列は NSArrayController にバインドされ、配列コントローラーのコンテンツ配列はコントローラー オブジェクトの NSArray にバインドされます。データはテーブルに正常に表示されます。dataSourceテーブル ビューのアウトレットとアウトレットをコントローラー オブジェクトに接続し、delegateこれらのメソッドを実装しました。

- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
    NSLog(@"dragging");
    return YES;
}

- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)op
{
    return NSDragOperationEvery;
}

- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
              row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation
{
    return YES;
}

ドラッグタイプも登録しました-awakeFromNib

#define MyDragType @"MyDragType"

- (void)awakeFromNib
{
    [super awakeFromNib];
    [_myTable registerForDraggedTypes:[NSArray arrayWithObjects:MyDragType, nil]];
}

問題は、 -tableView:writeRowsWithIndexes:toPasteboard: メソッドが呼び出されないことです。私はたくさんの例を見てきましたが、間違っていることは何もわかりません。カスタムセルを使用していることが問題でしょうか? この機能を有効にするために、セルのサブクラスでオーバーライドする必要があるものはありますか?

編集:確認しました。カスタム セルを通常の NSTextFieldCell に切り替えると、ドラッグが機能するようになりました。では、カスタム セルでドラッグ アンド ドロップを機能させるにはどうすればよいでしょうか。

4

7 に答える 7

2

問題を修正しました。テーブル ビューでカスタム NSCell とバインディングを使用すると、問題が発生するようです。NSTableViewDataSourceバインディングとアレイコントローラーではなく、従来の方法に切り替えることで解決しました。

于 2011-01-13T04:35:13.563 に答える
2

私にとってうまくいくのは、カスタム セル (私の場合は init) のイニシャライザ内で、init または initImageCell ではなく initTextCell を呼び出すことです。スーパークラスが NSCell か NSActionCell かは関係ないようです。また、バインディングがあり、ドラッグは引き続き機能します。

于 2012-07-17T00:49:04.203 に答える
1

ドラッグを開始するには、これで十分です。デリゲート メソッドを接続しました?

于 2011-01-13T02:09:19.353 に答える
0

私は問題に遭遇しました。私は NSCell サブクラスを持っていて、それを実装しtableView:writeRowsWithIndexes:toPasteboard 、dataSource を NSTableView に設定しました。ドラッグしても機能しません。

カスタム サブクラスの init でセル タイプを設定した場合

    self.type = NSTextCellType;

それから私は引きずります。そうしないと、デフォルトNSNullCellTypeでドラッグが機能しません。NSTextFieldCell細胞の種類が違うので、別のサブクラスを使って動かした人はうまくいくと思います。

于 2014-12-13T00:48:27.600 に答える
0

同様の問題も見られます。NStableView のドラッグ アンド ドロップが機能しません。テーブルビューに 4 つの列があり、そのうちの 2 つはカスタム セルです。非カスタム セルのドラッグは、セル セパレーターでも動作しますが、カスタム セルでは動作しませんが、正常に動作します。

私のカスタム セルは、問題の原因となっていた NSButtonCell からサブクラス化されました。提案どおり、親クラスを NSButtonCell から NSActionCell に変更しました。これで、ドラッグは完全に機能します。

NSCell と NSActionCell の両方で動作しますが、セルでアクションが必要だったので NSActionCell を使用しました。

于 2014-09-10T13:05:27.350 に答える
0

この問題に遭遇しました。ドラッグ アンド ドロップを適切に機能させたい場合は、カスタム セルを拡張する必要はNSActionCellありません。NSCellおそらくNSCell、すべてを機能させるために実装できるものがありますが、に切り替えた後はそれ以上掘り下げませんでしたNSActionCell。少なくとも、それで問題は解決しました。

于 2011-01-13T18:48:39.907 に答える