Delegate avec NSTextField

Bonsoir à  tous et à  toutes,


 


Je suis en train de lire le bouquin de Aaron Hillegass (3° édition - Pearson). Un des premiers exercices consiste à  faire parler la voix synthétique de OS X. Un champs de text (NSTextField) est positionné dans Interface Builder. J'aimerais récupérer le delegate pour savoir combien de caractère sont entrée dans cette ligne mais la méthode n'est jamais appelé.


 


Donc dans le .h j'ai bien le protocole : NSTextDelegate. J'ai même "tiré" le delegate du NSTextField au AppDelegate sous Interface Builder. J'ai ensuite implémenté la méthode suivante :



- (void)textDidChange:(NSNotification *)notification
{
NSLog(@toto);
}

Toto n'est jamais affiché. Une idée ?


Réponses

  • CéroceCéroce Membre, Modérateur
    Qui est délégué de quoi ? Qui se conforme à  quel protocole ? Ce n'est pas clair dans le message, alors je suppose que ça ne l'est pas tellement dans ta tête non plus.
  • Si si c'est très clair c'est juste que je ne sais pas expliquer à  l'écris.


     


    Donc dans mon .h du AppDelegate j'ai le protocole NSTextDelegate et donc dans le .m j'ai pu surcharger la méthode de mon post précédent. Je n'ai pas d'autres classes, l'App étant très simple je n'en ai pas ajouté.


     


    Ensuite, avec IB j'ai créé une liaison "Outlets" de type delegate entre mon NSTextField et mon AppDelegate.


     


    Voilà , après, quand je modifie mon NSTextField, le log n'est pas écris dans la console.


     


    Merci.


  • CéroceCéroce Membre, Modérateur
    Et quand tu appuies sur Entrée ? ça a l'air idiot, mais il me semble que NSTextField n'envoie pas les actions en continu durant la frappe, même si tu coches la case "Continuous".
  • Alors je viens d'essayer avec la case Continuous coché et décoché et dans les deux cas j'ai testé la touche entrée. Toujours rien.


  • AliGatorAliGator Membre, Modérateur
    octobre 2014 modifié #6
    "textDidChange" est une méthode du NSTextDelegate, pas de NSTextFieldDelegate.

    (NSTextDelegate est le type du delegate pour les objets NSText, dont la principale sous-classe est NSTextView)

    Toi tu utilises un NSTextField, qui hérite de NSControl mais pas de NSText. Son delegate se conforme au protocole NSTextFieldDelegate (et pas NSTextDelegate, donc).

    D'après la doc, c'est "controlTextDidChange:" qu'il faut implémenter (qui vient de NSControl) et pas "textDidChange:" (qui n'est que pour les NSText / NSTextView)
  • Ola tu es bien concentré @Aligator :)


  • ObjectiveSwift :


    Tu lis le Hillegass : c'est un très bon bouquin.


    Ton bout de code : qui envoie la notification? Ce ne peut pas être un IBOutlet. A la rigueur une IBAction... As-tu vraiment besoin d'une NSNotification???  (si tu travailles dans une seule classe AppDelegate par exemple, ou Document, c'est inutile : des [self quelqueChose] feront parfaitement l'affaire)


     


    Si NSLog n'est pas lu, c'est parce que la méthode n'est pas appelée. Tu ne nous montres pas le reste.... Je me souviens un peu de cet exercice, si je relis le corrigé, je vois :



    [speechSynth setDelegate:self];

    C'est une classe assez simple à  employer, tu l'instancie, tu lui donnes le texte, et elle se "débrouille"!



     


Connectez-vous ou Inscrivez-vous pour répondre.