Smileys !

08:34 modifié dans API AppKit #1
Salut tout le monde,

Je cherche à  reprensenter graphiquement les smileys d'un texte. Remplacer le :-) par :) par exemple.
Je cherche donc un moyen simple d'insérer une image à  la place d'un morceau de texte. Sachant que mon texte est un NSAttributedString.
J'aimerai éviter de devoir dessiner le smiley. Je pensais plus à  une orientation Rich Text :)

Merci d'avance pour votre aide,
Louka.

Réponses

  • schlumschlum Membre
    08:34 modifié #2
    Le Rich Text ne gère pas les images (pas avec Mac OS X en tout cas à  ma connaissance...)
    Dès qu'on met des images dans un fichier RTF, il devient RTFD qui est en fait un bundle qui contient le texte d'un côté et les images de l'autre !
  • AliGatorAliGator Membre, Modérateur
    08:34 modifié #3
    Oui ça dépend ce que tu cherches à  faire, à  sauvegarder ton message ensuite ou pas, et à  utiliser des images prédéfinies ou pas.
    Si c'est pour par exemple un petit module de chat dans ton appli, et remplacer les [tt]:-D[/tt] par une image :) interne à  ton programme dans ton Bundle juste au moment de l'affichage, je pense que c'est quand même jouable.
    Du coup je pense que tu peux faire mumuse avec les NSAttributedString Application Kit Additions (entre autres [tt]+attributedStringWithAttachment:[/tt])

    Essaye déjà  de créer à  la main une AttributedString en lui associant un TextAttachment lié à  ton fichier image en dur, et de l'afficher.
    Ensuite il sera toujours temps de composer ta NSAttributedString avec des parties de texte et des parties avec images, et enfin de faire la procédure de remplacement automatiquent entre tes smileys et les images associées.
  • AliGatorAliGator Membre, Modérateur
    08:34 modifié #4
    Et pour créer ton NSTextAttachment, il suffit d'utiliser
    initWithFileWrapper:

    Initializes a newly allocated NSTextAttachment object to contain the given file wrapper.

    - (id)initWithFileWrapper:(NSFileWrapper *)aWrapper
    Parameters

    aWrapper

        The file wrapper for the receiver.

    Return Value

    The receiver initialized to contain aWrapper and use an NSTextAttachmentCell as its attachment cell.
    Discussion

    This method is the designated initializer for the NSTextAttachment class.

    If aWrapper contains an image file that the receiver can interpret as an NSImage object, sets the attachment cell's image to the NSImage rather than to the icon of aWrapper.
    C'est même donc indiqué ce qu'il faut faire qd c'est un fichier image contenant une NSImage ;)
  • 08:34 modifié #5
    Hmm ok je vais matter tout ça.

    En fait le but est à  peu près de faire comme iChat, sauf qu'il n'y aura pas d'enregistrement/ouverture. Juste un affichage :)

    Merci, je vous tiens au courant  ;)
  • 08:34 modifié #6
    Bon ben j'ai réussi  :o

    J'ai fait comme ça pour tester (donc c'est clair que niveau agencement du code c'est pas top :D )

    <br />NSString* texte = @&quot;Test pourri &quot;;<br />	<br />	NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:texte attributes:nil];<br />	<br />	NSTextAttachment* attachement = [[NSTextAttachment alloc] initWithFileWrapper:nil];<br />	[[attachement attachmentCell] setImage:[NSImage imageNamed:@&quot;Crying&quot;]];<br />	NSAttributedString* smiley = [NSAttributedString attributedStringWithAttachment:attachement];<br />	[attrString appendAttributedString:smiley];<br />	[attachement release];<br />	<br />	[textField setAttributedStringValue:attrString];<br />	<br />	[attrString release];<br />
    
Connectez-vous ou Inscrivez-vous pour répondre.