NSComboBox - Obtenir des informations sélectionnées et NSComboBoxDataSource
-
19-09-2019 - |
Question
Pour la vie de moi, je suis continuellement déconcerté avec NSComboBox
.
I créé un objet qui est conforme au protocole NSComboBoxDataSource
, et mis en oeuvre:
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
Je mets l'instance de mon NSComboBox
à utiliser une source de données et définir cet objet comme source. Cela fonctionne très bien, mon implémentation retourne le nombre d'éléments, et retourne une valeur NSString
pour un élément à indices spécifiques.
Alors je décide que je veux faire quelque chose quand quelque chose est sélectionné, c'est là mes problèmes commencent. Il n'y a pas de méthode évidente pour remplacer dans le protocole NSComboBoxDataSource
pour gérer la sélection des éléments dans la zone de liste déroulante.
Alors, j'ai aussi mon objet conforme à NSComboBoxDelegate
et mettre en œuvre:
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;
Malheureusement, à la différence NSTableView
sur la sélection, l'objet de la notification est le NSComboBox
pas l'objet de l'élément sélectionné. « Très bien » je me dis, je vais appeler la méthode NSComboBox
:
- (id)objectValueOfSelectedItem;
Cela devrait renvoyer l'élément sélectionné et je peux aller de là. Cependant, cette méthode doit être appelée uniquement lorsque usesDataSource
est réglé sur NO
, ce qui est mon cas. Avertissements commencent à voler quand j'utiliser.
Alors, ma question est, quelle est la bonne façon de gérer les sélections de NSComboBox
lorsque vous utilisez une source de données?
La solution
Je pense que vous voulez indexOfSelectedItem au lieu de objectValueOfSelectedItem. Ensuite, puisque vous êtes la source de données, vous devriez être en mesure d'appeler votre propre méthode de comboBox:objectValueForItemAtIndex:
.