NSTextView avec des jetons
-
12-09-2019 - |
Question
Comment puis-je ajouter des jetons, comme NSTokenField
, à un NStextView
?
La solution
Ceci est en fait un peu compliqué. Vous devrez créer un NSTextAttachment
personnalisé pour chaque « jeton » et l'insérer dans le NSTextStorage
pour votre NSTextView
.
Il y a un grand message par David Sinclair à Dejal systèmes qui explique comment le faire.
Autres conseils
Je me suis dit une approche simple qui utilise une classe de cellules personnalisées pour les jetons:
- Ecrire une classe de cellules qui hérite
NSTextAttachmentCell
et réimplémenter
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
Ce sera la classe qui représente les jetons dans votreNSTextView
. - Pour insérer un jeton procédez comme suit:
- Créer une instance de
NSTextAttachment
- Régler la cellule de la pièce jointe à une instance de votre classe cellulaire jeton.
- Créer une chaîne attribué à cette pièce jointe.
- Insérez la chaîne attribuée dans la vue texte.
- Créer une instance de
Une méthode qui insère un jeton dans la vue du texte pourrait ressembler à ceci:
- (void)insertAttachmentCell:(NSTextAttachmentCell *)cell toTextView:(NSTextView *)textView
{
NSTextAttachment *attachment = [NSTextAttachment new];
[attachment setAttachmentCell:cell];
[textView insertText:[NSAttributedString attributedStringWithAttachment:attachment]];
}
Cette approche est plus appropriée pour les jetons que celui par David Sinclair . Il n'y a pas besoin d'utiliser des enveloppes de fichiers, car nous voulons afficher le contenu dynamique (jetons) plutôt que des images statiques.
Un regard sur les concepts de David pourrait être utile si. Il représente une bonne approche pour mettre en œuvre le glisser-déposer resp. copier coller des fonctionnalités.