1

ファイルブラウザとしてAppleの例「アウトラインビュー」を使用しています。Appleが書いたとおりのDataSourceとFileSystemItemがあります。ファイル名またはフォルダ名をクリックしたままドラッグすることができません。クリックすると、selectedRow が青色に変わります。私が保持するように、何も起こりません。青い線を押したまま移動すると、ファイル リストがスクロールします。

Apple の "Drag N Drop Outline View" コードを確認しましたが、探しているものではありません。ファイルを並べ替えたり、OutlineView 内からドラッグしたりしたくありません。ファイル名 (最終的にはそのパス) を NSTextfield にドラッグしたいと考えています。ドラッグ操作を登録するための NSOutlineView を取得できませんでした。

私は NSOutlineView をサブクラス化し、試しました:

- (void)awakeFromNib {
    [_outlineView registerForDraggedTypes:[NSArray arrayWithObjects:LOCAL_REORDER_PASTEBOARD_TYPE, NSStringPboardType, NSFilenamesPboardType, nil]];
    [_outlineView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];
}

-(NSDragOperation)、dragEntered、-(void)registerForDraggedTypes など...

特別なコードなしで、NSScrollView からこの NSTextField にテキストをドラッグしても問題ありません。どうやら NSOutlineView は NSScrollView のネイティブ ドラッグ機能を継承していませんか?

では、NSOutlineView を取得してドラッグできるようにするにはどうすればよいでしょうか。繰り返しますが、Apple の DragNDropOutlineView は、私が望んでいた以上のことを行い、私が望んでいることを実行せず、そのドラッグ機能を取得する方法を理解するのに役立ちませんでした。

4

1 に答える 1

1

registerForDraggedTypesこのように宣言できます

[outline_view registerForDraggedTypes:[NSArray arrayWithObjects:LOCAL_REORDER_PASTEBOARD_TYPE,NSColorPboardType,NSDragPboard, nil]];

そして、ドラッグ操作を実行するには、このメソッドを実装する必要がありますNSOutlineView

- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pasteboard
{

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:items];
    [pasteboard declareTypes:[NSArray arrayWithObject:LOCAL_REORDER_PASTEBOARD_TYPE] owner:self];
    [pasteboard setData:data forType:LOCAL_REORDER_PASTEBOARD_TYPE];
    return YES;   
}

これにより、行をドラッグできNSOutlineViewます..

于 2012-09-04T07:17:52.723 に答える