Detecter touche backspace

CoreCore Membre
01:29 modifié dans API AppKit #1
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 !

Réponses

  • BruBru Membre
    01:29 modifié #2
    2 méthodes :

    - 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].

    .
  • CoreCore Membre
    01:29 modifié #3
    Merci !!  <3
  • CoreCore Membre
    01:29 modifié #4
    surcharges la méthode - (void)deleteForward:(id)sender dans ta view (mais il faut qu'elle accepte d'être keyView).


    Pour backspace ce serait pas plutot :

    - (void)deleteBackward:(id)sender
  • olivier555olivier555 Membre
    01:29 modifié #5
    - (void)keyDown:(NSEvent *)theEvent, et tu testes  [theEvent characters]==NSDeleteFunctionKey


    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 ==?
  • BruBru Membre
    mai 2005 modifié #6
    dans 1116321269:

    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]

    .
  • olivier555olivier555 Membre
    01:29 modifié #7
    Ca ça me fait une autre erreur :

    error: cannot convert '<anonymous enum>' to 'objc_object*' in argument passing

    Mais qu'est-ce que ça peut bien vouloir dire???
  • mai 2005 modifié #8
    De nouveau regarde dans les delegate methods. 2 pistes (je n'en ai essayé aucune, et je suis à  la fac pour le moment, donc pas moyen de tester):
    - 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:
    if (aSelector == @selector(deleteBackward:))<br />&nbsp; &nbsp; NSLog(@&quot;Oh yeah!&quot;);<br />return YES;
    


    [EDIT]Oups, le code donné ne marche que pour les NSTextView, pas pour les NSView en général.
  • BruBru Membre
    01:29 modifié #9
    dans 1116322393:

    Ca ça me fait une autre erreur :

    error: cannot convert '<anonymous enum>' to 'objc_object*' in argument passing

    Mais qu'est-ce que ça peut bien vouloir dire???


    J'ai corrigé mon message (un excès de rhum-orange hier est sans-doute à  l'origine de ma bétise)...

    .
  • olivier555olivier555 Membre
    01:29 modifié #10
    YEEEEEES ça marche! Bon, si c'est du rhum orange je te pardonne, c'est pour la bonne cause.
  • RocouRocou Membre
    01:29 modifié #11
    Bonjour,

    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"?
  • Philippe49Philippe49 Membre
    01:29 modifié #12
    Une vue ne réponds pas d'emblée auxKeyboard's events.
    Consulter le ch 19 de Hillegass (méthodes accepts(becomes,resign)FirstResponder de NSResponder)
  • RocouRocou Membre
    01:29 modifié #13
    dans 1247469880:

    Une vue ne réponds pas d'emblée auxKeyboard's events.
    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?  ???
  • AliGatorAliGator Membre, Modérateur
    01:29 modifié #14
    Non cette méthode resignFirstResponder a un nom qui peut en effet être trompeur (faux ami), il ne s'agit pas de refuser à  être le firstResponder, mais à  abandonner le fait de l'être.
    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)
  • RocouRocou Membre
    01:29 modifié #15
    dans 1247470806:

    Non cette méthode resignFirstResponder a un nom qui peut en effet être trompeur (faux ami), il ne s'agit pas de refuser à  être le firstResponder, mais à  abandonner le fait de l'être.
    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.
Connectez-vous ou Inscrivez-vous pour répondre.