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?

Était-ce utile?

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:.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top