NSTextField et son delegate
gibet_b
Membre
Salut à tous,
J'ai voulu implèmenter une méthode delegate dans mon PreferenceController pour qu'il active un bouton si et seulement si il y avait une lettre dans un NSTextField.
J'ai donc mis dans mon PreferenceController.h :
Et dans mon PreferenceController.m :
Et dans Interface Builder, j'ai activé le delegate pour le NSTextField sur le File's Owner (PreferenceController).
Mais lorsque je tape dans mon textfield, rien, il semble ne pas passer dans textDidChange :-\\
Je sens l'erreur de débutant mais pourtant j'ai vérifié par rapport à ce qui est dit dans "Cocoa par la pratique" ::)
J'ai voulu implèmenter une méthode delegate dans mon PreferenceController pour qu'il active un bouton si et seulement si il y avait une lettre dans un NSTextField.
J'ai donc mis dans mon PreferenceController.h :
// Méthodes delegate<br />- (void)textDidChange:(NSNotification *)aNotification;
Et dans mon PreferenceController.m :
// Méthode delegate pour l'activation du bouton Add<br />- (void)textDidChange:(NSNotification *)aNotification<br />{<br /> [addButton setEnabled:[[nameCategoryField stringValue] isNotEqualTo:@""]];<br /> NSLog(@"delegate");<br />}
Et dans Interface Builder, j'ai activé le delegate pour le NSTextField sur le File's Owner (PreferenceController).
Mais lorsque je tape dans mon textfield, rien, il semble ne pas passer dans textDidChange :-\\
Je sens l'erreur de débutant mais pourtant j'ai vérifié par rapport à ce qui est dit dans "Cocoa par la pratique" ::)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je dis ça à tout hasard, hein, parce que pourtant j'avais compris comme toi que c'était [tt]textDidChange:[/tt] la méthode de delegate, mais vu qu'elle n'est pas appelée et surtout en relisant ce qui est mis dans la doc, j'ai un gros doute...
La doc dit que cette méthode ne fait que poster la notification et que le message envoyé au délégué est bien [tt]controlTextDidChange[/tt] donc tu n'as plus qu'à essayer avec celle là
Ah au fait sinon au passage : pour une méthode de delegate, tu n'as pas à la déclarer dans le .h (c'est comme le awakeFromNib, tu n'écris pas son prototype dans le .h non plus, tu ne fais que surcharger...)
Et merci pour ce que tu m'as dit en ce qui concerne le .h ça me paraissait bizarre mais dans "Cocoa par la pratique", il déclare la méthode delegate dans le .h
-Si on décide d'utiliser la méthode delegate, il faut en effet mettre son contrôleur comme receveur du message controlTextDidChange. Le contrôleur sera alors automatiquement déclaré pour recevoir la notification.
[tt]
-(void)controlTextDidChange:(NSNotification *)notification
{
}
[/tt]
-Si on décide d'utiliser les notifications, il faut alors déclarer son contrôleur au centre de notification. Cette méthode a pour avantage de choisir le nom de la méthode que l'on veut, mais surtout de définir quel objet sera surveillé. Alors que pour la méthode delegate, il va falloir aller chercher dans le userInfo de la notification pour savoir quel objet est concerné si on a besoin de différencier tel ou tel objet.
[tt]
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-(void)awakeFromNib
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(monTextFieldChange name:NSControlTextDidChangeNotification object:monTextField];
}
-(void)monTextFieldChange:(NSNotification *)notification
{
}
[/tt]
-Sinon, pour le fait de déclarer ou pas les méthodes surchargées, perso je les déclare toutes, car cela permet de voir d'un coup d'oeil toutes les méthodes implémentées en lisant le fichier d'interfaçage, sans aller perdre du temps dans le fichier d'implémentation. C'est d'ailleurs, je pense, l'optique du bouquin "Cocoa par la pratique" aussi.Â
Tu as mis le point dessus, merci pour ces éclaircissements
Par contre, ne pas oublier le [tt][super dealloc][/tt] quand on surcharge la méthode [tt]dealloc[/tt] !!
(d'ailleurs j'ai remarqué que si on l'oublie, il nous met un warning pour nous signaler l'oubli, enfin du moins avec mes réglages depuis que j'Xcode sur mon iMac Intel j'ai eu ce warning suite à cet oubli... sais pas si c'est la config par défaut mais c'est tant mieux )
PS pour Gibet_b : Oui l'avatar vient du fameux logo Amstrad, mais l'histoire de l'avatar elle ne vient pas de là (mon surnom vient de plusieurs choses à la fois, l'une d'elle et la plus courte à expliquer étant la consonnance de mon nom de famille Et le fait qu'il n'y ait qu'un seul "L" à mon pseudo (alors que l'animal homonyme en a 2) a aussi son histoire...). C'est suite à mon surnom que j'ai pris le croco d'Amstrad pour avatar et non l'inverse, mais l'idée me plaisait bien aussi
D'ailleurs ce soir dès que je rentre je met la version vectorisée dudit avatar (fait par un pote très doué en retouches et manip photoshop même s'il se refuse à l'admettre ) à la place de ce pixellisé qui semble tout moche à côté
[EDIT]Ayé, me suis refait une beauté [/EDIT]