je ne trouve pas la solution donc je viens vers vous ;-).
J’ai un textField qui, quand je clique dessus, fait ouvrir un pickerView dans le inputView et place les données dans le textField.
Mais, comme je vais devoir utiliser ce code plusieurs fois, j’aimerais ne pas le répéter et le placer dans une class à part.
J’ai donc créer une première classe TempoTextField qui est une extension de TextField et une deuxième class TempoPickerView qui est une extension de PickerView et qui a une variable « tempo » qui change bien a chaque fois que je tourne le pickerView.
Mais dans la class TempoTextField, je ne sais pas comment observer la variable tempo. Un didSet ne fonctionne pas entre 2 class ? Je n’y arrive pas en tout cas. Et j’aimerais que le text du TextField change automatiquement quand la variable « tempo » change.
Je ne sais pas si je suis très clair…
la première class :
C’est bien compliqué ton code. Plus grand monde ne code directement les objets graphiques. Storyboard ou SwiftUI sont nettement plus efficaces pour créer des interfaces adaptatives que s’embêter à gérer par code la frame et la position des objets sur l’écran.
Si tu débutes en programmation en utilisant un vieux livre, des tutos anciens ou de vieilles vidéo, je recommande de tout balancer et de reprendre sur une base moderne.
Enfin bref, comment résoudre ton problème ? A ta place, je ne chercherais pas à faire communiquer des classes entre-elles. Pour des tas de raison, notamment l’utilisation du paradigme MVC (Modele/Vue/Controlleur). Pourquoi ne pas créer un composant graphique personnalisé, intégrant un TextField et un PickerView dans une même classe ?
Ca peut parfois être intéressant de créer des sous-classes de composants que l’on veut réutiliser dans le projet.
Par contre, autant je comprends pourquoi tu as redéfini ton champ texte, autant le picker n’a pas besoin de sous-classes mais uniquement d’un delegate pour le remplir et récupérer ses valeurs. Tu pourrais l’intégrer dans ta classes de champ texte, et faire en sorte que ton champ texte soit l’interlocuteur du picker.
Voici un exemple que j’avais fait pour un client : un champ texte avec un DatePicker :
J’ai tout mis dans le même fichier, qui en fin de compte n’est pas très gros. Ça règle mon problème et fonctionne très bien maintenant.
Ceci dit, Maxime, J’ai fait le test avec ton code. Il fonctionne très bien sur Xcode 11 mais pas avec Xcode 12…
Par contre si quelqu’un connait la méthode pour faire boucler un pickerView, je suis preneur. Car dans le code ci dessous c’est un peu de la bidouille.