Tester le dernier caractère tappé dans une NSTextView

olivier555olivier555 Membre
21:26 modifié dans API AppKit #1
Bonjour!
J'ai juste une petite question qui doit pas être sorcier en fait, mais j'ai pas trouvé de solution qui me convienne. J'ai une sous classe d'une NSTextView, et je voudrais que l'utilisateur puisse tapper un texte dedans (logique) et que lorsqu'il saisit un espace la classe balance un évènement. Autrement dit je cherche à  tester le dernier caractère entré dans une NSTextView tout en affichant le texte (au fait j'ai déjà  surchargé la fonction didChangeText de ma classe, il ne manque plus qu'un if("dernier caractere == espace")). Bon, j'ai l'impression d'avoir été super pas clair pour dire quelquechose de super simple... Fin bref merci d'avance!!!!

Réponses

  • CoreCore Membre
    21:26 modifié #2
    Sur un NSString tu obtiens le nb de characteres avec

    - (unsigned int)length
    


    et pour obtenir le dernier

    - (unichar)characterAtIndex:(unsigned)index
    
  • olivier555olivier555 Membre
    21:26 modifié #3
    Ouais merci mais si l'utilisateur tape quelquechose au milieu d'un paragraphe par exemple, je ne veux pas tester le dernier caractère du paragraphe mais le dernier caractère qu'il a tapé.
  • CoreCore Membre
    mai 2005 modifié #4
    y avait quiproquo sur le mot "dernier" dsl

    [edit]

    Dans ce cas faudrait peut être intercepter le caractère, le tester et le renvoyer à  la view pour l'afficher
  • 21:26 modifié #5
    Tu implémentes [tt]- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString[/tt] dans le delegate de ton textView, il n'est pas nécessaire de sous-classer (n'oublie pas de renvoyer YES si le caractère frappé n'est pas un espace).
  • amnesicamnesic Membre
    mai 2005 modifié #6
    si tu tiens absolument à  sous-classer (pas forcement le plus élégant ) tu peux faire :

    - (void)keyUp:(NSEvent *)theEvent<br />{<br />    NSLog(@&quot;theChar %@&quot;,[theEvent characters]);<br />}
    

    [Edit] Je suis bien d'accord avec Renaud l'utilisation de delegate est bien plus adaptée si la raison de ton sous-classement de NSTextView ce limitait à  cet usage.
  • 21:26 modifié #7
    Les méthodes de delegate sont justement faite pour éviter d'avoir à  sous-classer si on désire personnaliser le comportement d'un objet (dans certaines limites, mais ce qui est demandé là  est assez basique justement).
  • olivier555olivier555 Membre
    21:26 modifié #8
    Yes les gars merci beaucoup ça marche!!!!  :adios!:
    Bon j'ai sous classé parce que je ne pouvais pas faire autrement pour ce que je voulais faire, mais par votre intermédiaire j'ai compris ce que sont les delegate et ça je suis sûr que ça va m'être utile à  l'avenir. Encore merci!
Connectez-vous ou Inscrivez-vous pour répondre.