2012-05-24 5 views
2

J'ai un NSComboBox avec une source de données et il fonctionne parfaitement lorsque vous cliquez sur le triangle et sélectionnez l'un des éléments en cliquant dessus. Cependant, je veux aussi permettre à l'utilisateur de taper dans la boîte pour sélectionner le nom en utilisant l'auto complète. Actuellement, lorsque l'utilisateur tape, l'élément que je souhaite sélectionner autocomplete, mais ne sélectionne pas. Ma pensée était que je devrais implémenter une méthode de délégation de sorte que lorsque l'utilisateur tape dans la zone de liste déroulante et le nom de l'élément de sélection autocomplètes, laissant la liste déroulante exécutera la méthode pour ensuite sélectionner l'élément du même nom de la pop listeNSComboBox délégation

I mis en œuvre cette méthode de délégation:

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor { 

    NSString *tempString = [outletPerformanceVenue stringValue]; 

    NSLog(@"New Value = %@",tempString); 

    [outletPerformanceVenue selectItemWithObjectValue:tempString]; 

    return TRUE; 
} 

Cependant, j'ai reçu l'erreur du compilateur suivant:

*** -[NSComboBoxCell selectItemWithObjectValue:] should not be called when usesDataSource is set to YES 

Semble assez simple, mais me laisse perplexe ... ce serait le meilleur manière de sélectionner l'article? Devrais-je déterminer l'index de l'enregistrement dans le tableau de sources de données qui contient ce nom, puis sélectionnez l'élément de zone de liste déroulante en utilisant le même index? Ou y a-t-il un moyen plus direct?

* EDIT *

Une simple question plus directe pourrait être:

Si un utilisateur tape (plutôt que de sélectionner dans la liste déroulante) le nom d'un élément dans la zone de liste déroulante. Comment puis-je récupérer l'index de cet élément de la zone de liste déroulante lors de l'utilisation d'une source de données?

Pour ajouter l'insulte à l'injure, la documentation d'Apple dit que le selectItemWithObjectValue: devrait travailler avec les sources de données internes ou externes ... par ici:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ComboBox/Tasks/SettingComboBoxValue.html

+0

Avez-vous déjà eu de la chance en découvrant cela? – Kyle

Répondre

3

Réponse courte: utilisez la méthode selectItemAtIndex, ou appelez setStringValue: (NSComboBox hérite de NSTextField) si vous voulez vraiment utiliser une chaîne.

Et juste pour l'exhaustivité: Je suis venu ici à cause d'un problème lié mais légèrement différent.

Je vais juste expliquer comment j'ai construit ma combobox. Je ne suis pas sûr si cela s'applique à votre situation, mais j'espère que cela pourrait aider quelqu'un.

J'ai implémenté les méthodes DataSource pour que l'achèvement fonctionne, mais je laisse les liaisons effectuer le travail pour définir la valeur. De cette façon, le fait de retourner renvoie soit l'autocomplétion de l'élément à l'une des options, soit la création d'une nouvelle valeur s'il n'y a pas d'auto-complétion disponible. Les fixations prennent juste soin de définir et d'obtenir la valeur.