Delegate avec NSTextField
ObjectiveSwift
Membre
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 ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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.
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.
(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 :
C'est une classe assez simple à employer, tu l'instancie, tu lui donnes le texte, et elle se "débrouille"!