exécuter du code à la prise de focus d'un TextField
Rocou
Membre
Bonjour,
Soit un bouton qui ouvre une fenêtre (Panel) dans laquelle se trouve un objet DatePicker.
Quand l'utilisateur clique sur une date, celle-ci est affichée dans un TextField.
Tout ceci fonctionne très bien.
Je voudrais qu'une fois la date choisie par un clic de l'utilisateur, la fenêtre contenant le DatePicker, devenue inutile, se ferme.
J'ai bien réussi à la fermer au clic mais alors la date n'est pas transmise au TextField (j'imagine que la fenêtre se ferme avant).
Aussi, j'ai pensé envoyer l'ordre de fermeture de ma fenêtre à la prise de focus du TextField. Est-ce une bonne idée? Si oui (ou non), comment faire cela?
Soit un bouton qui ouvre une fenêtre (Panel) dans laquelle se trouve un objet DatePicker.
Quand l'utilisateur clique sur une date, celle-ci est affichée dans un TextField.
Tout ceci fonctionne très bien.
Je voudrais qu'une fois la date choisie par un clic de l'utilisateur, la fenêtre contenant le DatePicker, devenue inutile, se ferme.
J'ai bien réussi à la fermer au clic mais alors la date n'est pas transmise au TextField (j'imagine que la fenêtre se ferme avant).
Aussi, j'ai pensé envoyer l'ordre de fermeture de ma fenêtre à la prise de focus du TextField. Est-ce une bonne idée? Si oui (ou non), comment faire cela?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Y a pas de raison que la fermeture de la fenêtre empêche de récupérer la valeur.
Je n'ai pas tout saisi.
Apparemment, tu as un textField et un bouton dans une fenêtre.
Quand tu cliques sur le bouton, tu affiches une autre fenêtre (panel) qui montre un datePicker.
Quand tu choisis une date (a priori tu utilises le datePicker graphique), le textField dans la première fenêtre doit être alimenté avec la date choisie dans le datePicker du panel, puis ce panel doit se fermer.
Chez moi, un tel scénario fonctionne correctement.
Voici le code de l'objet contrôleur :
La méthode AfficheFenetreDatePicker: est attaché au bouton qui affiche le panel du datePicker. fenetreDatePicker est l'outlet qui pointe sur le panel du datePicker.
La méthode actionDatePicker: est la méthode action du datePicker qui est appelée quand on choisit un date. textField est l'outlet du textField de la première fenêtre.
La propriété release when closed n'est pas vraiment impactée, puisque normalement c'est la méthode action qui est utilsée, et c'est dans cette dernière que le panel est effacé (normalement par un orderOut:, à moins que ce soit un close, et dans ce cas, plantage au deuxième clic sur le bouton si release when closed est coché).
Oui, c'est exactement cela.
Merci pour le code mais y-a-t-il moyen de réaliser la même chose en utilisant uniquement Interface Builder?
Non, pas de type "release on close".
La "fermeture de la fenêtre qui empêche la récupération de la valeur", c'est juste mon hypothèse
Comme je le signalais à NO, j'essaie de faire tout cela sans rien coder, juste en utilisant IB.
J'ai idiotement oublié de le préciser dans mon premier message.
Quand tu dis que tu veux tout faire par IB, je pense que tu parles des bindings. Or, ma religion m'interdit d'utiliser les bindings.
Les bindings, c'est mal !
Les bindings, c'est crade !
Et tu peux bien le voir : tu veux faire quelque chose d'un peu spécial, et hop, ça marche plus !
Et comprendre pourquoi cela ne marche pas (le retour de valeur entre les 2 fenêtres), cela va être hard...
Pareil que No, les bindings c'est LE mal. Ce n'est qu'une preuve de plus.
[Edit] Effectivement, avec un "release on close", plantage à la seconde ouverture... mais il n'avait peut-être pas essayé de deuxième ouverture
Et ça aurait pu expliquer ce comportement aussi (mais ça aurait plus volontiers abouti à un crash, c'est sûr...).
Rassure toi, ça m'est arrivé
C'est No qui m'a dépanné (http://www.objective-cocoa.org/forum/index.php?topic=2615.0)
Merci à tous les deux. Je ne sais pas encore ce que sont les bindings mais je trouvais bien pratique les raccourcis IB. Je vais devoir supprimer le "Date formatter" que j'avais glissé dans mon TextField et utiliser la classe dans mon code: du boulot en plus.
çà , cela s'appelle faire compliqué quand on peut faire simple ...
Quand aux bindings, je trouve les propos exagérés dans ce post.
Je n'ai pas réussi à faire simple :P
Dès que j'ai commencé à utilisé du code, pfuiit, le Date formatter est devenu inopérant.
Je trouve ça plutôt génial au contraire et je dois dire que je ne me prive pas de les utiliser... assez souvent.
Je n'ai pas souvenir, d'ailleurs, d'une quelconque mise en garde dans le bouquin de Hillegass lorsqu'il nous fait découvrir ces outils "magiques" tant ils peuvent simplifier beaucoup de choses.