[résolu] Passer d'un textfield à  l'autre par la touche tab (et FistResponder par programma

mybofymybofy Membre
novembre 2013 modifié dans API AppKit #1

Bonjour


 


Truc bête.


 


Je crée une application OSX "Toto".


Dans le nib, je place deux NSTextField.


Run Ok.


Je vois mes TextField et je passe de l'un à  l'autre par la touche tab.


 


Je crée une application "Tata" avec un nib sans fenêtre.


J'ajoute un NSViewController "Titi" avec nib.


Dans le nib de "Titi", je place deux NSTextField.


Run Ok.


Je vois mes TextField et je ne peux pas passer de l'un à  l'autre par la touche tab.


 


Je me doute qu'il faut faire quelque chose dans le nib de "Titi", mais quoi ?


Il faut sans doute jouer avec le cube First Responder, mais comment ?


Il faut sans doute installer une chaà®ne de répondeurs, mais comment ?


 


J'ai vu quelque chose là  dessus, mais je n'arrive pas à  le retrouver...


 


Merci d'une piste.


 


Réponses

  • CéroceCéroce Membre, Modérateur

    Il faut sans doute installer une chaà®ne de répondeurs, mais comment ?

    Clic droit sur le 1er TextField -> 2è TextField. Sélectionner Next Responder.


  • Clic droit sur le 1er TextField -> 2è TextField. Sélectionner Next Responder.




    Clic droit sur le 1er TextField : panneau noir avec Outlets, Sent Actions, etc.


    Que signifie " -> 2è TextField. Sélectionner Next Responder." ?

  • Puisque ça ne marche pas avec le nib, ou plus exactement que je ne sais pas comment faire malgré l'excellente réponse de Ceroce que je ne comprends pas,


    j'ai essayé par programmation avec les NSResponder :



    - (void)awakeFromNib {
    [_nom acceptsFirstResponder];
    [_nom becomeFirstResponder];
    [_nom setNextResponder:_prenom];
    [[self view] setNeedsDisplay:YES];
    NSLog(@AuteurViewCtrl>;awakeFromNib>_nom : %@", _nom);
    NSLog(@AuteurViewCtrl>;awakeFromNib>_prenom : %@", _prenom);
    NSLog(@AuteurViewCtrl>;awakeFromNib>[_nom nextResponder] : %@", [_nom nextResponder]);
    }

    J'obtiens :



    2013-11-09 15:09:23.319 TyTy[5403:303] AuteurViewCtrl>awakeFromNib>_nom : <NSTextField: 0x600000183c20>
    2013-11-09 15:09:23.319 TyTy[5403:303] AuteurViewCtrl>awakeFromNib>_prenom : <NSTextField: 0x600000183dc0>
    2013-11-09 15:09:23.319 TyTy[5403:303] AuteurViewCtrl>awakeFromNib>[_nom nextResponder] : <NSTextField: 0x600000183dc0>

    Ce qui est ce que j'attendais.


     


    Mais le FirstResponder _nom n'est pas sélectionné et la touche tab est inopérante.


     


    Cf. https://github.com/mybofy/TyTy


    Merci 


  • Peut-être que Céroce voulait dire : 


     


    Tu cliques-droit-glisses de 1 vers 2.


  • Tu connect l'outlet NextResponder du textfield 1 à  ton textfield 2...


  • iLandesiLandes Membre
    novembre 2013 modifié #7

    Je suis aussi intéressé par le sujet.


     


    Mais il n'y a pas de NextResponder dans l'outlet textfield ni dans textfieldcell


     


  • mybofymybofy Membre
    novembre 2013 modifié #8

    Au fait, j'ai oublié de dire que je suis passé à  Xcode 5.0.1


    Amélioration notable, sous réserve d'inventaire approfondi, Source Control semble OK, y compris vers un repository distant (github.com) !


     


    Pour Colas2


    J'avais essayé, mais ça gère les positionnements graphiques.


     


    Pour Yoann


    seb@stien est dans la même situation que moi !


     


    Et pourquoi mon code #4 est sans effet ?


     


    Modif : parce que on ne peut définir un FirstResponder au niveau d'une view ; il faut le faire au niveau d'un window


     


    Merci.


  • Bizarre.


     


    Dans la version 4.6.3 de Xcode, cela marchait sans problème en plaçant les NSTextField dans le nib. Dans mon application CVSophie je passais de l'un à  l'autre par un tab.


     


    Je suis passé à  5.0.1 (déjà  mentionné). Xcode 5 me demande pour le NSViewController si je veux passer à  5. Je réponds OK.


     


    Et je ne peux plus passer d'un NSTextField à  l'autre !


     


    Cela associé à  l'absence de nextResponder a comme un parfum de bug pour un utilisateur basique comme moi. Non ? 

  • A mon avis mybofy il s'agit certainement d'un changement de Design pattern (de manière de faire). C'est un peu le problème avec Cocoa, les choses changent et ce que l'on croyais maitrisser ne fonctionne plus. J'ai le même problème avec le son. Je trouve plein d'exemples et d'entrées dans la doc qui sont obsolètes et qui ne marchent pas...


  • Si vous passez par l'inspecteur dans Xcode même et non au clic droit ça dit quoi ?


  • berfisberfis Membre
    novembre 2013 modifié #12

    J'ai essayé, cela donne les mêmes options que le hub. Pas de NextResponder.


     


    Mais dans la liste des ourlets, il existe nextKeyView.


  • En effet c'est nextKeyView le nom de l'outlet aujourd'hui, il a changé de nom on dirait.


  • Merci à  tous


  • Pas pour moi, je mets une illustration pour mieux expliquer.


     


    J'ai fais une mini appui dont les champs textfields sont ordonnées de bas en haut. Le but est de pouvoir  changer de textfield en appuyant sur TAB. en commençant par le 1, puis le 2, puis le 3 puis à  nouveau le 1, etc.


     


  • mybofymybofy Membre
    novembre 2013 modifié #16

    Dans nib.


    clic droit sur le premier NSTextField 1


    le panneau noir apparaà®t


    ligne nextKeyView : souris sur le bouton rond à  droite : un plus en négatif apparaà®t


        maintenir ctrl et glisser sur le NSTextField 2 (crée la connexion de 1 à  2)


    idem de 2 à  3, puis de 3 à  1


    ça crée une chaà®ne circulaire


     


    Ensuite il faut définir le FirstResponder pour 1.


    Dans la NSWindow qui contient tes NSTextField tu ajoutes quelque part (à  adapter à  ton cas) :


    [[self window]  makeFirstResponder:</span><span style="color:rgb(79,129,135);">_auteurViewCtrl</span><span style="color:rgb(0,0,0);"> </span>view<span style="color:rgb(0,0,0);">] </span>subviews<span style="color:rgb(0,0,0);">][</span>2<span style="color:rgb(0,0,0);">


     


    Modif:


    Bien sûr, il est plus simple d'utiliser un getter ... genre :


        BOOL sts = [[self windowmakeFirstResponder:[_auteurViewCtrl nomAuteur]];


     


     

  • Le first responder peut aussi être réglé depuis Interface Builder, dans les outlets de la NSWindow il y a initialFirstResponder


  • Super merci à  tous,


     


    Voici en PJ un projet simple crée sous xCode 5.0.1 qui montre comment définir l'ordre des texfield.


     


  • mybofymybofy Membre
    novembre 2013 modifié #19


    Le first responder peut aussi être réglé depuis Interface Builder, dans les outlets de la NSWindow il y a initialFirstResponder




    A condition qu'il y ait une NSWindow dans le nib !


    Dans mon cas, la NSWindow est crée par programmation, d'où ma suggestion.


     


    J'en profite pour dire que ce qui m'a mis la puce à  l'oreille, c'est que j'ai lu dans la doc que le FirstResponder devait être défini au niveau de la NSWindow. Ce qui explique toutes mes tentatives infructueuses de le faire au niveau d'une NSViewController avec nib.


    Et j'ai oublié l'existence des getter...


Connectez-vous ou Inscrivez-vous pour répondre.