Domanda

Sto cercando di impostare il drag and drop molto di base per il mio NSTableView. La vista tabella ha una sola colonna (con una cella personalizzato). La colonna è associato a un NSArrayController e matrice contenuto del controller di array è associato a un NSArray il mio oggetto controllore. La visualizzazione dei dati soddisfacente nella tabella. Ho collegato le dataSource e delegate punti di vista tabella al mio oggetto controller, e quindi implementato questi metodi:

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

Ho anche registrato i tipi di trascinare in -awakeFromNib:

#define MyDragType @"MyDragType"

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

Il problema è che i -tableView: writeRowsWithIndexes: toPasteboard: metodo è mai chiamato . Ho guardato un po 'di esempi e non riesco a capire tutto ciò che sto facendo male. Il problema potrebbe essere che sto usando un cellulare personalizzato? C'è qualcosa che dovrei esclusione nella sottoclasse di cellule per attivare questa funzionalità?

EDIT: Confermato. Commutazione la cella personalizzato per un NSTextFieldCell regolare fatta trascinando lavoro. Ora, come faccio a fare il drag e il lavoro di goccia con la mia cella personalizzato

È stato utile?

Soluzione 2

I risolto il problema. Sembra che ci sia un problema con l'utilizzo di attacchi con NSCells personalizzati in una vista tabella. Commutazione ai metodi tradizionali NSTableViewDataSource anziché attacchi e un controller di array risolto.

Altri suggerimenti

I sbatteva la testa contro il muro alla ricerca di una soluzione più elegante per lo stesso problema, e poi mi sono imbattuto in questo:

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

Per esempio, se si desidera il supporto drag-and-drop da una tabella, è necessario impostare una fonte di dati per esso - anche se si sta utilizzando attacchi di fornire i dati effettivi, è possibile impostare una fonte di dati su di esso, e Cocoa ha bisogno di una per gestire il tableView:writeRowsWithIndexes:toPasteboard e messaggi correlati.

Sì. Se hai tutto legato al controller di array, cosa si può fare è di avere il controller di array implementare le funzioni di drag / drop necessarie e quindi impostare origine dati della vista tabella per il controller di array con setDataSource:.

Quello che funziona per me è quello di chiamare initTextCell invece di init o initImageCell all'interno di inizializzazione della mia cella personalizzato (nel mio caso, init). Non sembra importare se la superclasse è NSCell o NSActionCell. Inoltre, ho vincolante, e trascinando ancora funziona.

Questo dovrebbe essere sufficiente per consentire il trascinamento per iniziare. Stai che è stato collegato i metodi delegato?

mi sono imbattuto in questo problema, le vostre esigenze cellulari personalizzati per estendere NSActionCell non NSCell se si vuole drag and drop per funzionare correttamente. Probabilmente c'è qualcosa che si potrebbe implementare in NSCell che renderebbe tutto il lavoro troppo, ma non ho scavare ulteriormente dopo il passaggio a NSActionCell. Almeno, questo risolto il problema per me.

mi sono imbattuto nel problema. Ho una sottoclasse NSCell, e l'ho fatto realizzare il tableView:writeRowsWithIndexes:toPasteboard e l'origine dati è stato fissato per il NSTableView. Il trascinamento non avrebbe funzionato.

Se ho impostato il tipo di cellula del mio init per il costume sottoclasse

    self.type = NSTextCellType;

Poi vengo trascinamento. Se non lo faccio, il valore predefinito è NSNullCellType e trascinamento non funziona. Sto indovinando le persone che hanno ottenuto che funziona utilizzando un altro opere sottoclasse NSTextFieldCell perché il tipo di cellule è diversa.

Ho anche osservare il problema simile, NSTableView drag & drop non funziona. Ho 4 colonna nella mia Tableview e due di loro sono cellule personalizzate. Trascinamento per cella non personalizzato è bene anche se il suo lavoro sul separatore cellulare così tuttavia il relativo funzionamento con celle personalizzate lavorando.

La mia cella personalizzato è stato sottoclasse di NSButtonCell, che stava causando il problema. Così come suggerito, ho cambiato la mia classe padre da NSButtonCell a NSActionCell. Ora, trascinando è perfettamente funzionante.

Funziona sia con NSCell così come NSActionCell però ho necessaria un'azione sul mio cellulare in modo usato NSActionCell.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top