Question

Je suis en train de mettre en place le glisser-déposer très basique pour mon NSTableView. La vue de la table a une seule colonne (avec une cellule personnalisée). La colonne est liée à un NSArrayController, et le tableau de contenu du contrôleur de réseau est lié à un NSArray sur mon objet contrôleur. L'affichage des données bien dans le tableau. Je me suis connecté les sorties de dataSource et delegate de la vue de la table à mon objet contrôleur, puis mis en œuvre ces méthodes:

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

J'ai aussi enregistré les types de glissement dans -awakeFromNib:

#define MyDragType @"MyDragType"

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

Le problème est que les -tableView: writeRowsWithIndexes: toPasteboard: méthode est jamais appelé . Je l'ai regardé un tas d'exemples et je ne peux pas comprendre tout ce que je fais mal. Le problème pourrait être que j'utilise une cellule personnalisée? Y at-il quelque chose que je suis censé override dans la sous-classe de cellules pour activer cette fonctionnalité?

EDIT: Confirmé. Commutation de la cellule personnalisée pour un NSTextFieldCell régulier fait glisser le travail. Maintenant, Comment puis-je faire le travail glisser-déposer avec ma cellule personnalisée ?

Était-ce utile?

La solution 2

Je fixe la question. Il semble y avoir un problème avec l'utilisation de liaisons avec NSCells personnalisées dans une vue de tableau. Le passage à des méthodes traditionnelles de NSTableViewDataSource plutôt que de liaisons et un contrôleur de réseau résolu.

Autres conseils

Je frappait la tête contre le mur à la recherche d'une solution plus élégante au même problème, puis je suis tombé sur ceci:

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

  

Par exemple, si vous voulez soutenir glisser-déposer d'une table, vous devez configurer une source de données pour elle - même si vous utilisez des liaisons pour fournir les données réelles, vous pouvez définir une source de données dessus et cacao a besoin d'un pour gérer le tableView:writeRowsWithIndexes:toPasteboard et les messages connexes.

Yep. Si vous avez tout lié à votre contrôleur RAID, ce que vous pouvez faire est d'avoir le contrôleur RAID mettre en œuvre les fonctions de glisser / déposer nécessaires, puis définissez la source de données de l'affichage du tableau au contrôleur de tableau avec setDataSource:.

Ce qui fonctionne pour moi est d'appeler initTextCell plutôt que INITou initImageCell dans le initialiseur de ma cellule personnalisée (dans mon cas, init). Il ne semble pas question de savoir si la superclasse est NSCell ou NSActionCell. De plus, je l'ai obligatoire, et en faisant glisser fonctionne toujours.

Cela devrait être suffisant pour permettre à la glisser pour commencer. Êtes-vous que vous avez connecté les méthodes de délégué?

je suis tombé sur ce problème, vos besoins de cellules sur mesure pour étendre NSActionCell pas NSCell si vous voulez glisser-déposer pour fonctionner correctement. Il y a probablement quelque chose que vous pourriez mettre en œuvre NSCell qui rendrait trop tous les travaux, mais je ne creuser plus loin après le passage à NSActionCell. Au moins, la question qui a été fixé pour moi.

je suis tombé sur le problème. J'ai une sous-classe NSCell, et je l'ai mise en œuvre du tableView:writeRowsWithIndexes:toPasteboard et la source de données a été fixé pour la NSTableView. Faire glisser ne marcherait pas.

Si je mets la sous-classe type de cellule dans mon initialisation pour la commande

    self.type = NSTextCellType;

Alors je me glisser. Si je ne le fais pas, la valeur par défaut NSNullCellType et traînage ne fonctionne pas. Je devine que les gens qui obtenu ce travail en utilisant un autre travaux de NSTextFieldCell de sous-classe parce que le type de cellule est différent.

J'observe aussi la question similaire, NSTableView drag & drop ne fonctionne pas. J'ai 4 colonne dans mon tableview et deux d'entre eux sont des cellules personnalisées. Faire glisser pour la cellule non personnalisée fonctionne bien même si son travail sur le séparateur de cellules aussi bien mais son ne fonctionne pas avec des cellules personnalisées.

  

Ma cellule personnalisée a été sous-classé de NSButtonCell qui était à l'origine de la   problème. Ainsi, comme l'a suggéré, j'ai changé ma classe parente de NSButtonCell à   NSActionCell. Maintenant, Traîner fonctionne parfaitement.

Il fonctionne aussi bien avec NSCell ainsi que NSActionCell mais je action requise sur ma cellule ainsi utilisée NSActionCell.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top