Déroutante ComboBox
mac_manu
Membre
Bonjour la compagnie,
J'ai implémenté une série de NSComboBox pour fonctionner avec des dataSource. Dans Interface Builder j'ai coché la case Uses Data Source et la case Completes pour compléter automatiquement le mot lors de la frappe (Si le mot existe of course) et j'ai relié ces objets comme delegate à mon NSController.
Et là , le résultat est plutôt étonnant. Lors des premières saisies, tout fonctionne. Ensuite, avec la même lettre introduite, il ne reconnait plus le mot qu'il venait pourtant de reconnaà®tre, mais lorsque l'on clique sur la flèche down de la ComboBox et que l'on relâche, ça re-fonctionne, pour une ou deux fois. Puis, après environ 5 utilisations, elle ne reconnait plus rien. Quelqu'un voit d'où peut venir le problème? :fouf):
J'ai implémenté une série de NSComboBox pour fonctionner avec des dataSource. Dans Interface Builder j'ai coché la case Uses Data Source et la case Completes pour compléter automatiquement le mot lors de la frappe (Si le mot existe of course) et j'ai relié ces objets comme delegate à mon NSController.
Et là , le résultat est plutôt étonnant. Lors des premières saisies, tout fonctionne. Ensuite, avec la même lettre introduite, il ne reconnait plus le mot qu'il venait pourtant de reconnaà®tre, mais lorsque l'on clique sur la flèche down de la ComboBox et que l'on relâche, ça re-fonctionne, pour une ou deux fois. Puis, après environ 5 utilisations, elle ne reconnait plus rien. Quelqu'un voit d'où peut venir le problème? :fouf):
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
C'est pas très clair ce que tu dis...
Tu dis "Ensuite...", mais ensuite après quoi ?
Quand tu tapes, le mot le plus proche s'affiche. Tant que tu ne valides pas (via touche Entrée, ou sélection par la combo), tu es toujours en mode recherche. Peut-être ceci explique t'il ton "problème"...
A part les traditionnels "ça marche pas" ou "comportement étrange", tu n'expliques ce qu'il faut pour qu'on reproduise l'éventuel bug...
Chez moi, tout me semble OK, alors soit plus explicite !
.
Ton cas n'est pas simple.
Puisque ton combo est dans le NSTableView, cela suppose qu'il n'y a qu'1 seul NSComboBoxCell qui est utilisé pour toutes les lignes du tableau : donc, il n'y a qu'un seul datasource, et 1 seul contenu pour tous les combos.
Ainsi, à chaque reloadData, c'est le contenu de tous les combos de la table qui va changer, et ceci quelque soit la sélection courante dans le popup correspondant (celui de la même ligne).
C'est clair que ça va foutre un bordel monstre...
Je serais d'avis d'utiliser le delegate tableView:willDisplayCell:forTableColumn:row: de NSTableView.
Dans ce delegate, il te faudra récupérer la sélection courante du popup correspondant, afin d'enchaà®ner un reloadData sur le NSComboBoxCell.
Ici, j'ai supposé que t'as implémenté une méthode setComboSelection: dans l'objet datasource du combo. Cette méthode permet de retourner la liste du combo spécifique à cette sélection.
Les 2 datasources (NSTableView et NSComboBox) sont self (le même objet qui implémente le delegate) : à modifier si les datasources sont dans d'autres objets.
D'autre part, la colonne contenant le pop a un identifiant "popup", et celle du combo "combo".
J'espère que ça marchera.
.