Problème sur NSComboBox et Autocompletion avec des objets en DataSource

dakujadakuja Membre
12:46 modifié dans API AppKit #1
Bonjour à  tous,

Je souhaite avoir une combobox qui permet l'autocomplétion.
Cette combobox a pour DataSource une collection d'objet à  la place d'une collection de NSString et je souhaite créer un nouvel objet à  la volée à  l'aide de l'autocompletion.

Lorsque je change de valeur à  la souris en sélectionnant une entrée dans la liste, ça marche bien. Mais quand je saisie au clavier, la combobox s'obstine à  renvoyer un NSString contenant la nouvelle chaine à  la place de mon nouvel objet. Pourtant la liste de la combobox est bien mise à  jour avec la nouvelle valeur.


Est ce que le fait d'essayer de donner la chaine de caractères est le fonctionnement "normal" ou y-a-t-il quelque chose à  faire ou est ce que je n'ai rien compris au fonctionnement des combo ?



je joint le code que j'utilise dans le DataSource de la combo.


<br /><br />- (id)comboBoxCell:(NSComboBoxCell *)aComboBoxCell objectValueForItemAtIndex:(NSInteger)index<br />{<br />&nbsp; &nbsp; return [[categoryArrayController arrangedObjects] objectAtIndex:index];<br />}<br /><br />- (NSInteger)numberOfItemsInComboBoxCell:(NSComboBoxCell *)aComboBoxCell<br />{<br />&nbsp; &nbsp; return [[categoryArrayController arrangedObjects] count];<br />}<br /><br />- (NSString *)comboBoxCell:(NSComboBoxCell *)aComboBoxCell completedString:(NSString *)uncompletedString<br />{<br />&nbsp; &nbsp; for(Category * category in [categoryArrayController arrangedObjects])<br />&nbsp; &nbsp; &nbsp; &nbsp; if ([[category label] hasPrefix:uncompletedString])<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return [category label];<br /><br />&nbsp; &nbsp; return nil;<br />}<br /><br />- (NSUInteger)comboBoxCell:(NSComboBoxCell *)aComboBoxCell indexOfItemWithStringValue:(NSString *)aString<br />{<br />&nbsp; &nbsp; // création du nouvel objet <br />&nbsp; &nbsp; Category * category = [[dataController categories] searchOrCreateCategoryWithLabel:aString];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; // Mise à  jour du controller associé à  la collection d&#039;objet<br />&nbsp; &nbsp; [categoryArrayController rearrangeObjects];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; // retourne l&#039;index du nouvel objet<br />&nbsp; &nbsp; return [[categoryArrayController arrangedObjects] indexOfObject:category];<br />}<br /><br />

Réponses

  • laudemalaudema Membre
    12:46 modifié #2
    Bonjour Dakuja,

    Il me semble que c'est dû à  ce que la combo associe un NSTextField à  un NSMenu, quand tu sélectionnes via le menu tu peux agir, mais au clavier Cocoa ne connaà®t plus que le texte entré: c'est comme si tu avais tapé ce texte et tabulé pour signer la fin d'édition.
    Tu pourrais peut être appeler ta méthode via une connexion depuis IB avec un clic droit sur la combo pour tirer jusque File's Owner (si c'est lui ton Controller) et appeler la méthode de ton choix.
  • dakujadakuja Membre
    12:46 modifié #3
    Bonjour Laudema,

    Merci beaucoup pour ces éclaircissements sur le fonctionnement des combobox.  o:)
    J'ai donc fait un Formatter qui permet de me renvoyer l'objet voulu à  la place de la chaine de caractère et ça marche très bien.
Connectez-vous ou Inscrivez-vous pour répondre.