NSComboBox & formatter

muqaddarmuqaddar Administrateur
19:38 modifié dans API AppKit #1
Salut,

Je cherche à  mettre un formatter dans ma NSComboBox qui doit afficher et prendre en compte les valeurs 3,4,5,6 et rien d'autre.
Je l'ajoute, je choisis le format 100 / -100 et donne une valeur minimale et maximale (3 et 6).
Mais quand je veux afficher l'UI, il n'affiche plus que la première valeur (3) et il met du blanc à  la palce des autres ?
Que faut-il modifier au formatter ?

Réponses

  • VeillardVeillard Membre
    19:38 modifié #2
    Essaie avec :

    Positive : 0
    Zero : 0
    Negative : 0
    Min : 3
    Max : 6

    Ca devrait marcher
  • muqaddarmuqaddar Administrateur
    19:38 modifié #3
    Et non, ça marche tjs pas...
  • cbrandtcbrandt Membre
    19:38 modifié #4
    un NSPopUpButton ne serait pas plus approprié ? parce que bon, pour seulement 4 valeurs........ ???
  • muqaddarmuqaddar Administrateur
    19:38 modifié #5
    Y'en a plusieurs à  la suite, et Renaud m'a conseillé à  juste titre de passer par du combo. Les gens vont plus vite en tapant les chiffres et avec la touche tab.
  • fouffouf Membre
    19:38 modifié #6
    En utilisant la programmation, tu devrait pouvoir utiliser dans awakeFromNib un truc dans le genre :
    <br />for(int i = 3; i&lt;=6;i++){<br />[comboBox addItemWithValue:[NSNumber numberWithInt:i]];<br />}<br />
    


    PS: Fait attention avec la boucle for, je me goure tout le temps avec le sens des inegalites et aussi pour savoir si il faut les mettre strictes ou pas.
    Les boucles c'est pas mon for
  • BaardeBaarde Membre
    19:38 modifié #7
    C'est bizarre. Le compilateur n'accepte pas que i soit déclarée à  l'intérieur de for()

    error: `for' loop initial declaration used outside C99 mode
  • muqaddarmuqaddar Administrateur
    19:38 modifié #8
    dans 1106856105:

    En utilisant la programmation, tu devrait pouvoir utiliser dans awakeFromNib un truc dans le genre :
    <br />for(int i = 3; i&lt;=6;i++){<br />[comboBox addItemWithValue:[NSNumber numberWithInt:i]];<br />}<br />
    


    PS: Fait attention avec la boucle for, je me goure tout le temps avec le sens des inegalites et aussi pour savoir si il faut les mettre strictes ou pas.
    Les boucles c'est pas mon for


    oui, ça marcherait, mais le pb, c'est le formatter , c juste pour enpécher des gens d'écrire n'importe quoi, si je le mets pas, il m'affiche bien mes valeurs par défaut.
  • muqaddarmuqaddar Administrateur
    19:38 modifié #9
    dans 1106856105:

    En utilisant la programmation, tu devrait pouvoir utiliser dans awakeFromNib un truc dans le genre :
    <br />for(int i = 3; i&lt;=6;i++){<br />[comboBox addItemWithValue:[NSNumber numberWithInt:i]];<br />}<br />
    


    PS: Fait attention avec la boucle for, je me goure tout le temps avec le sens des inegalites et aussi pour savoir si il faut les mettre strictes ou pas.
    Les boucles c'est pas mon for


    oui, ça marcherait, mais le pb, c'est le formatter , c juste pour enpécher des gens d'écrire n'importe quoi, si je le mets pas, il m'affiche bien mes valeurs par défaut.
  • Eddy58Eddy58 Membre
    janvier 2005 modifié #10
    Apparemment NSComboBox et NSNumberFormatter ne font pas bon ménage, en faisant un essai, lorque je met un formatter, les valeurs du menu disparaissent et il n'y a que du vide à  la place... ???
    Bon, c'est pas grave tu as tout ce qu'il faut sous la main pour surveiller toi-même le textfield du combobox. Le mieux est de supprimer le formatter de ton combobox.:)
    Tu passes par une notification pour détecter tout changement dans le textfield (avec un outlet sur ta comboBox), et ensuite tu testes ta valeur.
    Le code ci-dessous n'est pas testé donc il se peut qu'il ne soit pas entièrement juste, et qu'il ne prenne pas tout les cas de figure en compte (donc incomplet).... :)
    Dans awakeFromNib:, tu mets ta notification (par contre ne pas oublier le removeObserver dans dealloc:) :

    [tt]
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(comboBoxTextFieldModif:) name:NSControlTextDidChangeNotification object:comboBox];
    [/tt]

    Puis tu met ta méthode de test dans le controleur adéquat :

    [tt]
    -(void)comboBoxTextFieldModif:(NSNotification *)notification
    {
    // Si on est dans l'intervalle alors c'est Ok
    if ([comboBox intValue]>2 && [comboBox intValue]<7)
    {
    return;
    }
    // Si on est supérieur on règle au maxi
    if ([comboBox intValue]>6)
    {
    [comboBox setIntValue:6];
    return;
    }
    // Si une valeur inférieure ou autre chose a été rentré (chaine quelconque) on règle au mini
    [comboBox setIntValue:3];
    }
    [/tt]
  • muqaddarmuqaddar Administrateur
    19:38 modifié #11
    Ah bein merci Eddy !
    Bonne idée la notification.

    J'ai une question qui n'a rien à  voir par rapport à  ton code. Je vois que tu mets des return; dans un void :
    je savais pas qu'on pouvait (vu que les void ne retournent rien en général).
  • fouffouf Membre
    19:38 modifié #12
    J'ai une question qui n'a rien à  voir par rapport à  ton code. Je vois que tu mets des return; dans un void :
    je savais pas qu'on pouvait (vu que les void ne retournent rien en général).


    Les return interrompent la methode. Ca evite de faire des if...then...else gigantesque. Donc dans une methode qui retourne void, il suffit juste d'ecrire return; pour que le fonction s'arrete et eviter des testes inutiles. C'est plus facile, plus propre et surement plus performant.

    J'espere que j'ai repondu a ta question.
  • muqaddarmuqaddar Administrateur
    19:38 modifié #13
    Oui.

    Mais je connaissais exit; en php, c'est pareil apparemment. ;)
Connectez-vous ou Inscrivez-vous pour répondre.