Problème d'item mal sélectionné par l'OS dans une combo box

Bonjour

J'utilise une NSComboBox pour un menu que l'utilisateur peut modifier à volonté.

Ce menu propose souvent des items ayant la même chaîne de caractère. Aussi lorsqu'on l'ouvre à nouveau, c'est le premier item ayant ce nom qui est choisi et non celui sélectionné par l'utilisateur si il est plus tardif.

Exemple : Items [o,a,o,o,r,a,p]
Si je sélectionne le 3° "o", lorsque j'ouvre à nouveau le NSComboBox c'est le premier qui est surligné alors que est le 3° qui est en fonction et affiché à l'écran.

Je ne vois pas comment corriger cela. Auriez vous une idée?
Comment forcer le NSComboBox à utiliser l'index de l'item sélectionné et non le NSString en somme?

Merci par avance.

Réponses

  • Je précise que NSPopUpButton n'a pas été pris. Un test récent encore m'a montré encore que cette classe ne me permet pas de créer des items portant le même nom. Je ne saurais pas expliquer pourquoi.

  • Hello,
    deux solutions:
    soit tun veut utiliser un NSComboBox alors tu garde la sélection avec son index et non son nom
    ` let cb = NSComboBox.init(frame: NSMakeRect(10,10,250,26))

        cb.addItems(withObjectValues: ["a","b","c","a"])
    
        cb.selectItem(at: 3)
    
        let sel = cb.indexOfSelectedItem
    
        cb.selectItem(at: sel)
    

    `

    soit tu un utilise ns NSPopupButton

    le truc pour avoir des entrées avec le même nom, c'est de passer par son menu interne.

    ` let pp = NSPopUpButton.init(frame: NSMakeRect(10,10,250,26), pullsDown: false)

        pp.addItems(withTitles: ["a","b","c"])
    
        let it = NSMenuItem.init(title: "a", action: nil, keyEquivalent: "")
    
        pp.menu?.addItem(it)
    

    `

  • Merci Devulder pour ton post.

    Je me suis peut-être mal expliqué. Le fait que le NSComboBox propose différents items avec le même nom n'empêche pas de sélectionner le 2e,3e,4e item avec ce nom. C''est lorsqu'ensuite on ouvre à nouveau le menu que le premier item avec ce nom est grisé alors que c'est le 2e ou 3e que l'on a sélectionné précédemment.

    Exemple : Items [o,a,o,o,r,a,p]
    Je sélectionne le 3° "o", tout va bien. Mais lorsque j'ouvre à nouveau le menu, c'est le premier qui est en grisé, pas le 3°. C'est ça mon problème. Je voudrais que ce soit le 3e.

    Si j'emploie NSPopUpButton, le premier "o" est effacé et remplacé par le 3e lorsqu'on ajoute l'item de même nom.
    A mon avis, il faut que j'ajoute au nom un numéro ou n'importe quoi. Avez-vous une meilleure idée?

  • Une solution serait de mettre des caractères invisibles
    ca semble ok

    pp.addItems(withTitles: "o\u{200B}","a","o\u{200B}\u{200B}","o\u{200B}\u{200B}\u{200B}","r","a","p"])

  • NSComboBox supporte des items de type Any?. Il faudrait peut-être utiliser un objet avec un attribut "valeur" et un attribut index qui servira de repère pour l'ordre d'affichage.
    Je n'ai pas fait de test mais la doc NSComboBox propose beaucoup de réglages par API.

  • Merci pour vos posts (et aussi pour la citation de Conficius qui est très jolie). Je n'ai pas eu le temps de travailler au problème aujourd'hui, je vous tiens au courant des progrès grâce à vous.

  • J'ai opté pour le plus simple, une méthode qui ajoute un index en début de nom (de type : "10 -- monNom") mais l'indexation est refaite durant le fonctionnement du programme, l'archive ne le sauvegarde pas, ce qui permet d'utiliser les anciennes archives. Cela fonctionne.

    Merci encore.

Connectez-vous ou Inscrivez-vous pour répondre.