Frage

Ich versuche, sehr einfach per Drag einzurichten und Drop für meine NSTableView. Die Tabellenansicht hat eine einzige Säule (mit einer benutzerdefinierten Zelle). Die Säule ist mit einem NSArrayController gebunden, und der Inhalt Arrays Array-Controller ist mit einem NSArray auf meinem Controller-Objekt gebunden ist. Die Daten zeigen fein in der Tabelle. Ich verbinden die dataSource und delegate Auslässen der Tabellenansicht zu meinem Controller-Objekt, und dann diese Methoden implementiert:

- (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;
}

ich registrierte auch die Drag-Typen in -awakeFromNib:

#define MyDragType @"MyDragType"

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

Das Problem ist, dass die -tableView: writeRowsWithIndexes: toPasteboard: Methode ist nie genannt . Ich habe an einer Reihe von Beispielen sieht, und ich kann nicht herausfinden, was ich bin falsch. Könnte es sein, dass ich eine benutzerdefinierte Zelle verwendet werden? Gibt es etwas, das ich in der Zelle Unterklasse außer Kraft setzen soll diese Funktionalität aktivieren?

EDIT: Bestätigt. Umschalten der benutzerdefinierten Zelle für eine regelmäßige NSTextFieldCell gemacht Arbeit ziehen. Nun, Wie mache ich per Drag & Drop die Arbeit mit meiner benutzerdefinierten Zelle

War es hilfreich?

Lösung 2

fixed ich das Problem. Es scheint bei der Verwendung von Bindungen mit benutzerdefinierten NSCells in einer Tabellenansicht ein Problem zu sein. Der Wechsel zu den traditionellen Methoden NSTableViewDataSource anstatt Bindungen und ein Array Controller gelöst es.

Andere Tipps

Ich war schlage meinen Kopf gegen die Wand auf der Suche nach einer eleganteren Lösung für das gleiche Problem, und dann kam ich auf diese:

http://www.wooji-juice.com/blog/ Kakao-10-bindings.html

Zum Beispiel, wenn Sie aus einer Tabelle unterstützt Drag-and-Drop wollen, müssen Sie eine Datenquelle für sie einzurichten - auch wenn Sie Bindungen verwenden die aktuellen Daten zu versorgen, können Sie eine Datenquelle eingestellt darauf und Kakao muss man die tableView:writeRowsWithIndexes:toPasteboard und verwandte Nachrichten verarbeiten.

Ja. Wenn Sie alles gebunden zu Ihrem Array-Controller haben, was Sie tun können, ist der Array-Controller implementieren die notwendigen Drag / Drop-Funktionen haben, und legen Sie dann die Datenquelle mit dem Array-Controller des Tabellenansicht mit setDataSource:.

Was für mich funktioniert, ist initTextCell statt init oder initImageCell im initializer meiner benutzerdefinierten Zelle (in meinem Fall, init) zu nennen. Es scheint keine Rolle, ob die übergeordnete Klasse NSCell oder NSActionCell ist. Außerdem habe ich verbindlich, und ziehen nach wie vor funktioniert.

sollte sicherstellen, dass ausreichend sein, die ziehen, damit zu beginnen. Sind Sie sicher Sie die Delegatmethoden angeschlossen haben?

ich in dieses Problem lief, Ihre individuelle Zelle Bedürfnisse NSActionCell nicht NSCell zu verlängern, wenn Sie ziehen wollen und fallen richtig zu arbeiten. Es ist wahrscheinlich etwas, das man in NSCell implementieren könnte, dass es alle Arbeit machen würde, aber ich habe graben nicht weiter nach dem NSActionCell wechseln. Zumindest ist das das Problem behoben für mich.

Ich lief in das Problem. Ich habe eine NSCell Unterklasse, und ich habe die tableView:writeRowsWithIndexes:toPasteboard implementieren und die Datenquelle wurde für den NSTableView gesetzt. Ziehen würde nicht funktionieren.

Wenn ich den Zelltyp in meinem init für das benutzerdefinierte Set Unterklasse

    self.type = NSTextCellType;

Dann bekommen Ziehe ich. Wenn ich es nicht tun, wird standardmäßig NSNullCellType und Schleppen nicht funktioniert. Ich vermute, die Leute, die hätte es unter Verwendung eines andere Unterklasse NSTextFieldCell Werke zu arbeiten, weil der Zelltyp unterschiedlich ist.

Ich beobachte auch das ähnliche Problem, NSTableView Drag & Drop funktioniert nicht. Ich habe 4 Spalte in meinem Tableview und zwei von ihnen sind individuelle Zellen. Ziehen für nicht-benutzerdefinierte Zelle funktioniert gut, obwohl seine auf Zellseparator arbeiten als gut aber es ist nicht mit eigenen Zellen arbeiten.

wurde meine benutzerdefinierte Zelle aus NSButtonCell subclassed, die das verursacht wurde Problem. So wie vorgeschlagen, änderte ich meine Eltern-Klasse von NSButtonCell zu NSActionCell. Nun, Schleppen funktioniert perfekt.

Es funktioniert sowohl mit NSCell sowie NSActionCell aber ich Handlungsbedarf auf meiner Zelle so verwendet NSActionCell.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top