NSTextField et prise de focus

RocouRocou Membre
02:41 modifié dans API AppKit #1
Bonjour,

C'est sans doute basic mais je ne vois pas comment faire pour que le curseur se positionne sur un NSTextField parmi d'autres. Je n'arrive pas non plus à  passer d'un NSTextField à  un autre en pressant la touche TAB.

J'ai cru comprendre qu'il fallait implémenter la fonction
- (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector;
mais je n'arrive à  rien.

Peut-être qu'il est possible de réaliser tout ceci sous IB?

Réponses

  • CéroceCéroce Membre, Modérateur
    02:41 modifié #2
    La manipulation se fait sous Interface Builder. Imaginons que tu aies 3 text fields, qu'il faille aller de TF1 -> TF2 -> TF3.

    Relie l'outlet nextKeyView de TF1 à  TF2.
    Celle de TF2 à  TF3.
    Celle de TF3 à  TF1.

    En fait, dans la plupart des cas, ce n'est même pas nécessaire, c'est géré automatiquement. Tu peux le tester avec le simulateur d'IB.


  • 02:41 modifié #3
    dans 1241105976:

    La manipulation se fait sous Interface Builder. Imaginons que tu aies 3 text fields, qu'il faille aller de TF1 -> TF2 -> TF3.

    Relie l'outlet nextKeyView de TF1 à  TF2.
    Celle de TF2 à  TF3.
    Celle de TF3 à  TF1.

    En fait, dans la plupart des cas, ce n'est même pas nécessaire, c'est géré automatiquement. Tu peux le tester avec le simulateur d'IB.


    Perso meme en ayant fait ça ça n'avait pas marché pour moi... :(
  • AliGatorAliGator Membre, Modérateur
    02:41 modifié #4
    Oui ce que te dit Céroce c'est pour le coup de la touche Tab, chaque contrôle (donc entre autre chaque NSTextField) a un "nextResponder" qui est le contrôle "suivant" qui sera activé lorsque tu appuies sur la touche "TAB" pour changer le focus.

    Si tu veux, par code, activer un NSTextField* tf1 particuler à  un moment donné, de même cela passe par la notion de "responder" : en l'occurence il faut que tu demandes au NSTextField de devenir le firstResponder, pour lui demander d'avoir le focus donc.

    Je te conseille de lire la doc sur la classe NSResponder, ainsi que le programming guide associé surtout, tu y trouveras tout un tas d'explications.
  • CéroceCéroce Membre, Modérateur
    02:41 modifié #5
    Oui, excusez-moi je n'ai répondu qu'à  la moitié de la question.
    Pour fixer quel est le text field qui sera sélectionné au départ, il faut utiliser l'outlet initialFirstResponder de la fenêtre.
  • RocouRocou Membre
    02:41 modifié #6
    dans 1241105976:

    La manipulation se fait sous Interface Builder. Imaginons que tu aies 3 text fields, qu'il faille aller de TF1 -> TF2 -> TF3.

    Relie l'outlet nextKeyView de TF1 à  TF2.
    Celle de TF2 à  TF3.
    Celle de TF3 à  TF1.

    En fait, dans la plupart des cas, ce n'est même pas nécessaire, c'est géré automatiquement. Tu peux le tester avec le simulateur d'IB.

    Merci. J'avais bien tenté cela mais l'outlet nextKeyView était caché plus haut (il fallait faire défiler les outlet vers le haut).  :o
  • RocouRocou Membre
    02:41 modifié #7
    dans 1241107898:

    Oui, excusez-moi je n'ai répondu qu'à  la moitié de la question.
    Pour fixer quel est le text field qui sera sélectionné au départ, il faut utiliser l'outlet initialFirstResponder de la fenêtre.

    Par contre, cela ne fonctionne pas. Mon NSTextFiled est bien encadré en bleu mais le curseur n'est pas dedans
  • CéroceCéroce Membre, Modérateur
    02:41 modifié #8
    Ah... c'est étrange.

    Il est bien "Editable" ?
  • RocouRocou Membre
    02:41 modifié #9
    dans 1241107494:

    Si tu veux, par code, activer un NSTextField* tf1 particuler à  un moment donné, de même cela passe par la notion de "responder" : en l'occurence il faut que tu demandes au NSTextField de devenir le firstResponder, pour lui demander d'avoir le focus donc.

    Ha super, merci beaucoup!

    [monNSTextField becomeFirstResponder]; pour Eaglelouk
  • RocouRocou Membre
    02:41 modifié #10
    dans 1241108634:

    Ah... c'est étrange.

    Il est bien "Editable" ?

    Oui, par contre il est dans une NSView et non dans une fenêtre. Et dans une NSView, il n'y a pas d'outlet firstresponder.
  • CéroceCéroce Membre, Modérateur
    02:41 modifié #11
    dans 1241108742:

    Et dans une NSView, il n'y a pas d'outlet firstresponder.

    Oui, mais ça c'est normal. Une vue est faite pour être incorporée dans une fenêtre. Si tu inclus plusieurs vues dans une fenêtre, quel initialFirstResponder la fenêtre doit-elle prendre ? C'est donc à  faire par le code.
  • RocouRocou Membre
    02:41 modifié #12
    dans 1241109088:

    dans 1241108742:

    Et dans une NSView, il n'y a pas d'outlet firstresponder.

    Oui, mais ça c'est normal. Une vue est faite pour être incorporée dans une fenêtre. Si tu inclus plusieurs vues dans une fenêtre, quel initialFirstResponder la fenêtre doit-elle prendre ? C'est donc à  faire par le code.

    Oui, effectivement. Je me trouve un peu bête sur le coup.
    Merci beaucoup en tout cas.
  • 02:41 modifié #13
    dans 1241108662:

    dans 1241107494:

    Si tu veux, par code, activer un NSTextField* tf1 particuler à  un moment donné, de même cela passe par la notion de "responder" : en l'occurence il faut que tu demandes au NSTextField de devenir le firstResponder, pour lui demander d'avoir le focus donc.

    Ha super, merci beaucoup!

    [monNSTextField becomeFirstResponder]; pour Eaglelouk


    Oui j'ai du faire ça ducoup :| mais bon ça m'avait bien emmerdé que le nextKeyView ne marche pas... devoir coder un truc aussi bête... c'est embêtant  ;D
Connectez-vous ou Inscrivez-vous pour répondre.