[résolu] Passer d'un textfield à l'autre par la touche tab (et FistResponder par programma
mybofy
Membre
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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 :
J'obtiens :
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...
Je suis aussi intéressé par le sujet.
Mais il n'y a pas de NextResponder dans l'outlet textfield ni dans textfieldcell
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 ?
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.
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 window] makeFirstResponder:[_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.
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...