Question

Comment puis-je ajouter des jetons, comme NSTokenField, à un NStextView?

Était-ce utile?

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:

  1. 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 votre NSTextView.
  2. Pour insérer un jeton procédez comme suit:
    1. Créer une instance de NSTextAttachment
    2. Régler la cellule de la pièce jointe à une instance de votre classe cellulaire jeton.
    3. Créer une chaîne attribué à cette pièce jointe.
    4. Insérez la chaîne attribuée dans la vue texte.

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.

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