Detecter touche backspace
Core
Membre
Bonjour,
Je cherche à detecter lorsque l'utilisateur appuie sur la touche backspace dans ma View.
Je n'ai pas reussi à trouver des infos la dessus dans l'aide...
Merci !
Je cherche à detecter lorsque l'utilisateur appuie sur la touche backspace dans ma View.
Je n'ai pas reussi à trouver des infos la dessus dans l'aide...
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
- soit tu surcharges la méthode [tt]- (void)deleteForward:(id)sender[/tt] dans ta view (mais il faut qu'elle accepte d'être keyView).
- soit tu surcharges la méthode [tt]- (void)keyDown:(NSEvent *)theEvent[/tt], et tu testes [tt][theEvent characters]==NSDeleteFunctionKey[/tt].
.
Pour backspace ce serait pas plutot :
- (void)deleteBackward:(id)sender
Lorsque je fais ça j'ai une erreur :
no match for 'operator==' in '#`obj_type_ref' not supported by dump_expr#<expression error>(theEvent, _OBJC_SELECTOR_REFERENCES_0) == NSDeleteFunctionKey'
Faut-il utiliser un autre opérateur que ==?
Oui, la méthode characters renvoie un NSString, donc il faut utiliser les méthodes de comparaison de NSString : (supprimé pour cause de nullité)
Il faut tester le premier caractère renvoyé par la méthode characters avec NSDeleteFunctionKey :
[tt]if ([[theEvent characters] characterAtIndex:0]==NSDeleteFunctionKey)[/tt]
.
error: cannot convert '<anonymous enum>' to 'objc_object*' in argument passing
Mais qu'est-ce que ça peut bien vouloir dire???
- soit la méthode que je t'ai donné dans un autre post ([tt]textView:shouldChangeTextInRange:replacementString:[/tt]), dans quel cas, la replacementString serait une string vide ([tt]@""[/tt]), et le range de longueur non nulle (problème, pas moyen de faire la différence entre un deleteForward et un deleteBackward).
- il y a une autre delegate method qui est [tt]- (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector[/tt]) et dans ce cas tu fais un test du genre:
[EDIT]Oups, le code donné ne marche que pour les NSTextView, pas pour les NSView en général.
J'ai corrigé mon message (un excès de rhum-orange hier est sans-doute à l'origine de ma bétise)...
.
Je me permets de faire remonter ce vieux sujet car la détection de touche ne fonctionne pas chez moi.
J'ai bien implémenté la méthode - (void)keyDown:(NSEvent *)theEvent
dans mon code mais on ne passe jamais dedans.
Faut-il implémenter une autre méthode du genre "-(BOOL) isKeyDown"?
Consulter le ch 19 de Hillegass (méthodes accepts(becomes,resign)FirstResponder de NSResponder)
Merci.
Je n'avais implémenté que becomeFirstRespondeur. Il fallait également implémenter acceptsFirstRespondeur.
Est-il nécessaire d'implémenter resignFisrtResponder? A quoi sert cette méthode? Je comprends bien qu'il s'agit de renoncer à être le "firstResponder" mais si l'on implémente à la fois cette méthode avec les deux précédentes, comment l'ensemble peut-il fonctionner? ???
C'est à dire qu'elle est appellée quand l'objet souhaite abandonner le firstResponder (perdre le focus) pour savoir si elle a le droit (utile par exemple pour refuser de perdre le focus sur un champ de saisie de texte tant que la saisie n'est pas valide, etc)
Ok, merci beaucoup.